本文详细介绍了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'
}