本文详细介绍了Go语言中Iris框架的使用,包括安装、基本HTTP请求(GET、POST等)的处理、自定义请求处理、用户组管理和配置设置。示例代码展示了如何创建路由、接收不同格式的请求参数、错误处理以及配置信息的动态加载。此外,还提到了路径参数和正则表达式的应用。
1、安装
go get -u github.com/kataras/iris
然后在gopath目录下,新建first_iris文件夹
新建文件main.go
package main
import (
"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 main
import (
"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为:/getRequest
path := 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、Path
path := context.Path()
app.Logger().Info("请求URL: ", path)
// 2. Json解析
var person Person
if 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.Path
path := context.Path()
app.Logger().Info("请求URL:", path)
//2.XML数据解析
var student Student
if 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 main
import (
"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'
}