go语言学习005——iris框架学习

本文详细介绍了Go语言中Iris框架的使用,包括安装、基本HTTP请求(GET、POST等)的处理、自定义请求处理、用户组管理和配置设置。示例代码展示了如何创建路由、接收不同格式的请求参数、错误处理以及配置信息的动态加载。此外,还提到了路径参数和正则表达式的应用。

1、安装

go get -u github.com/kataras/iris

然后在gopath目录下,新建first_iris文件夹
新建文件main.go

package mainimport ("github.com/kataras/iris/v12""github.com/kataras/iris/v12/middleware/logger""github.com/kataras/iris/v12/middleware/recover"
)func main() {app := iris.New()app.Logger().SetLevel("debug")app.Use(recover.New())app.Use(logger.New())app.Get("/", func(ctx iris.Context) {ctx.HTML("Hello")})app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed))
}

之后go rum main.go
再浏览器localhost:8080访问

2、iris中的http8种请求

2.1、直接处理请求

package mainimport ("github.com/kataras/iris/v12""github.com/kataras/iris/v12/context"
)func main() {app := iris.New()//app.Get();  // 可以直接点出来8种获取网络资源的方法,//app.Put();app.Get("/getRequest", func(context iris.Context) {// 处理get请求,请求的url为:/getRequestpath := context.Path()app.Logger().Info(path)})// 1、处理Get请求app.Get("/userpath", func(context iris.Context) {path := context.Path()app.Logger().Info(path)context.WriteString("请求路径 + " + path)})// 2、处理Get请求,并接受参数app.Get("/userinfo", func(context iris.Context) {path := context.Path()app.Logger().Info(path)// 获取get请求携带的参数userName := context.URLParam("username")app.Logger().Info(userName)pwd := context.URLParam("pwd")app.Logger().Info(pwd)// 返回html格式context.HTML("<h1>" + userName + "," + pwd + "</h1>")})// 2.2、返回json格式的数据app.Get("/getJson", func(context iris.Context) {context.JSON(iris.Map{"message": "hello world", "requestCode": 200})})// 3、处理Post请求,form表单的字段获取app.Post("/postLogin", func(context iris.Context) {path := context.Path()app.Logger().Info(path)// 使用context.PostValue来获取post请求所提交的form表单数据name := context.PostValue("name")pwd := context.PostValue("pwd")app.Logger().Info(name, " ", pwd)context.HTML(name)})// 4、处理json格式的post请求// postman的请求信息:{"name":"davie","age": 28}app.Post("/postJson", func(context iris.Context) {// 1、Pathpath := context.Path()app.Logger().Info("请求URL: ", path)// 2. Json解析var person Personif err := context.ReadJSON(&person); err != nil {panic(err.Error())}context.Writef("Received : %#+v\n", person)})// 5、处理post请求 xml格式// postman的请求信息:{"name":"davie","age": 28}app.Post("/postXml", func(context iris.Context) {//1.Pathpath := context.Path()app.Logger().Info("请求URL:", path)//2.XML数据解析var student Studentif err := context.ReadXML(&student); err != nil {panic(err.Error())}//输出:context.Writef("Received:%#+v\n", student)})app.Run(iris.Addr(":8000"), iris.WithoutServerError(iris.ErrServerClosed))}type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}//自定义的结构体
type Student struct {//XMLName xml.Name `xml:"student"`StuName string `xml:"stu_name"`StuAge  int    `xml:"stu_age"`
}

2.2、使用通用的handle方法自定义

编写自己的请求处理类型以及对应的方法
和正则表达式

package mainimport ("github.com/kataras/iris/v12""github.com/kataras/iris/v12/context"
)func main() {app := iris.New()// 第二种统一使用handle处理方式app.Handle("GET", "/userinfo", func(context context.Context) {path := context.Path()app.Logger().Info(path)app.Logger().Error("requext is: ", path)context.Writef("写回去")})app.Handle("POST", "/postcommit", func(context context.Context) {path := context.Path()app.Logger().Info("post request ,the url is :", path)})// 正则表达式,带参数的app.Get("/weather/{date}/{city}", func(context context.Context) {path := context.Path()date := context.Params().Get("date") // 获取自定义的变量city := context.Params().Get("city")context.WriteString(path + " , " + date + " , " + city)})// 正则表达式,带参数,且带参数的数据类型的app.Get("/api/users/{isLogin:bool}", func(context context.Context) {path := context.Path()isLogin, err := context.Params().GetBool("isLogin")if err != nil {context.StatusCode(iris.StatusNonAuthoritativeInfo)}if isLogin {context.WriteString("已登录")} else {context.WriteString("未登录")}context.Writef(path)//context.Params().Get  之后提示的信息,就是可以获取的数据类型})app.Run(iris.Addr(":8800"), iris.WithoutServerError(iris.ErrServerClosed))}

2.3、用户组

先进入,user,
之后在选择登陆,还是而做其他的,
服务器端代码是前缀匹配,如果遇到了user,就跳转到user的组中,再接着做其他的相关的事情

	//app := iris.New()//userParty//userparty := user.Party() 用户组//users.Done(func(){})   执行完用户组之后,需要调用一下这个方法

2.4、配置信息

func main() {app := iris.New()// 1、代码直接配置app.Configure(iris.WithConfiguration(iris.Configuration{DisableInterruptHandle: false,EnablePathEscape: false,TimeRormat: "Mon,02 Jan 2006 15:04:05 GMT",}))// 2、读取tml配置文件读取服务的配置app.Configure(iris.WithConfiguration(iris.YAML("/Users/hongweiyu/go/src/irisDemo/004_handle_method/configs/iris.tml")))// 3、通过读取yaml配置文件app.Configure(iris.WithConfiguration(iris.YAML("("/Users/hongweiyu/go/src/irisDemo/004_handle_method/configs/iris.yml")))// 4、通过json配置文件file ,_ := os.Open("/User/hongweiyu/go/src/irisDemo/004_handle_method/config.json")defer file.Close()decoder := json.NewDecoder(file)conf := Coniguration{}err := decoder.Decode(&conf)fi err != nil {fmt.Println("error:",err)}fmt.Println(conf.Port)type Coniguration struct {AppName string 'json:"appname'Port int 'json:"port'
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/492560.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于SpringBoot+Vue.JS网上订餐系统(JAVA毕业设计)

本文项目编号 T 018 &#xff0c;文末自助获取源码 \color{red}{T018&#xff0c;文末自助获取源码} T018&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…

【AIGC安全】CCF-CV企业交流会直播回顾:探寻AI安全治理,共筑可信AI未来

文章目录 一、活动背景&#xff1a;AI技术快速发展与安全治理需求迫切二、论坛内容金耀辉&#xff1a;智能共生时代&#xff1a;平衡生成式AI的创新与风险何延哲&#xff1a;人工智能安全检测评估的逻辑和要点谢洪涛&#xff1a;面向特定人物深度伪造视频的主动防御与被动检测技…

2024年12月英语六级CET6写作与翻译笔记

目录 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可行的目标 2 翻译 2.1 洋山港(Yangshan Port) 2.2 中国航天事业 2.3 北斗卫星导航系统 1 写作 1.1 大学为学生提供了探索各种可能性 1.2 自律在个人成长中的重要性 1.3 切实可…

解决“SVN无法上传或下载*.so、*.a等二进制文件“问题

今天&#xff0c;在使用Subversion提交代码到服务器时&#xff0c;发现无法提交*.a、*.so等二进制文件&#xff0c;右击这些文件&#xff0c;发现其属性为ignores。     问题原因&#xff1a;SVN的配置文件里&#xff0c;屏蔽了*.a、*.so文件的上传与下载&#xff0c;并把这些…

linux-18 关于shell(十七)file命令

在linux里面是不以后缀名来区分文件类型的&#xff0c;它跟windows不一样&#xff0c;windows里面都会以后缀名来区分文件类型&#xff0c;比如说&#xff0c;.mp3&#xff0c;windows就会把它视为音乐文件&#xff0c;.txt就会视为纯文本文档&#xff0c;.png就会视为图片文档…

品牌控价:守护价值,引领渠道健康发展

在当今竞争激烈且多元化的商业环境中&#xff0c;品牌的发展之路犹如一场充满挑战与机遇的漫长征程。随着品牌影响力的逐步扩大&#xff0c;其销售渠道也日益丰富多样&#xff0c;尤其是电商平台的蓬勃兴起&#xff0c;使得品牌产品的销售链接如繁星般繁多。然而&#xff0c;这…

OpenEuler Linux上怎么测试Nvidia显卡安装情况

当安装好显卡驱动后怎么样知道驱动程序安装好了,这里以T400 OpenEuler 正常情况下,我们只要看一下nvidia-smi 状态就可以确定他已经正常了 如图: 这里就已经确定是可以正常使用了,这里只是没有运行对应的程序,那接来下我们就写一个测试程序来测试一下:以下代码通过AI给出然后…

shell5

字符串运算符 首先我们在终端利用vim打开u.sh str1"hello" str2"hello" if [ "$str1" "$str2" ]; thenecho True elseecho false fi我们把hello改为Hello&#xff0c;看一下大小写是否敏感 str1"Hello" str2"hello…

Linux-ubuntu之主频和时钟配置

Linux-ubuntu之主频和时钟配置 一&#xff0c;主频二&#xff0c;其它时钟配置1.PLL2和PLL3的PFD0-3设置2.AHB_CLK_ROOT3.IPG 和 PERCLK时钟 三&#xff0c;总结 一&#xff0c;主频 24MHz 晶振为内核和其它外设提供时钟源&#xff0c;经电路后到PLL1变为996MHZ&#xff0c;再…

深入浅出Flink CEP丨如何通过Flink SQL作业动态更新Flink CEP作业

复杂事件处理&#xff08;CEP&#xff09;是一种对事件流进行分析的技术&#xff0c;它能够识别出数据流中的事件序列是否符合特定的模式&#xff0c;并允许用户对这些模式进行处理。Flink CEP 是 CEP 在 Apache Flink 中的具体实现&#xff0c;是 Apache Flink 的一个库&#…

华为数通最新题库 H12-821 HCIP稳定过人中

以下是成绩单和考试人员 HCIP H12-831 HCIP H12-725 安全中级

Facebook 与数字社交的未来走向

随着数字技术的飞速发展&#xff0c;社交平台的角色和形式也在不断演变。作为全球最大社交平台之一&#xff0c;Facebook&#xff08;现Meta&#xff09;在推动数字社交的进程中扮演了至关重要的角色。然而&#xff0c;随着互联网的去中心化趋势和新技术的崛起&#xff0c;Face…

STM32中ADC模数转换器

一、ADC简介 ADC模拟-数字转换器 ADC可以将引脚连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a; 0~3.3V&#xff0c;转换结果范围&#xff1a;0~4095 18个输入…

fpga系列 HDL:Quartus II PLL (Phase-Locked Loop) IP核 (Quartus II 18.0)

在 Quartus II 中使用 PLL (Phase-Locked Loop) 模块来将输入时钟分频或倍频&#xff0c;并生成多个相位偏移或频率不同的时钟信号&#xff1a; 1. 生成 PLL 模块 在 Quartus II 中&#xff1a; 打开 IP Components。 file:///C:/intelFPGA_lite/18.0/quartus/common/help/w…

Springboot3.x配置类(Configuration)和单元测试

配置类在Spring Boot框架中扮演着关键角色&#xff0c;它使开发者能够利用Java代码定义Bean、设定属性及调整其他Spring相关设置&#xff0c;取代了早期版本中依赖的XML配置文件。 集中化管理&#xff1a;借助Configuration注解&#xff0c;Spring Boot让用户能在一个或几个配…

【游戏中orika完成一个Entity的复制及其Entity异步落地的实现】 1.ctrl+shift+a是飞书下的截图 2.落地实现

一、orika工具使用 1)工具类 package com.xinyue.game.utils;import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory;/*** author 王广帅* since 2022/2/8 22:37*/ public class XyBeanCopyUtil {private static MapperFactory mappe…

Unity 组件学习记录:Aspect Ratio Fitter

概述 Aspect Ratio Fitter是 Unity 中的一个组件&#xff0c;用于控制 UI 元素&#xff08;如Image、RawImage等&#xff09;的宽高比。它在处理不同屏幕分辨率和尺寸时非常有用&#xff0c;可以确保 UI 元素按照预期的比例进行显示。当添加到一个 UI 对象上时&#xff0c;Aspe…

uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!

**提要&#xff1a;**近段时间我们收到多个康复机构用户&#xff0c;咨询AI运动识别插件是否可以应用于肢力运动受限患者的康复锻炼中来&#xff0c;插件是可以应用到AI康复锻炼中的&#xff0c;今天小编就为您介绍一下AI运动识别插件在康腹锻炼中的应用场景。 一、康复机构的应…

Elasticsearch:什么是信息检索?

信息检索定义 信息检索 (IR) 是一种有助于从大量非结构化或半结构化数据中有效、高效地检索相关信息的过程。信息&#xff08;IR&#xff09;检索系统有助于搜索、定位和呈现与用户的搜索查询或信息需求相匹配的信息。 作为信息访问的主要形式&#xff0c;信息检索是每天使用…

Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架

Pytest-Bdd vs Behave&#xff1a;选择最适合的 Python BDD 框架 Pytest BDD vs Behave&#xff1a;选择最适合的 Python BDD 框架BDD 介绍Python BDD 框架列表Python BehavePytest BDDPytest BDD vs Behave&#xff1a;关键区别Pytest BDD vs Behave&#xff1a;最佳应用场景结…