一、Gin 简介
由于 Go 语言本身的网络库非常完善,所以相应的 Web 框架实现起来也相对来说简单一点。而 Gin 就是个简洁的 Go Web 微框架。
分装优雅,注释明确,使用简单。当然,最重要的性能优越。
二、Gin 使用
1. 创建路由
router := gin.Default()
router.GET("index", func(c *gin.Context)
{
c.String(200, "hello")
})
router.Run()
Gin 的创建路由方式非常简单,使用gin.Default()创建一个gin的默认路由,然后使用 GET 方法将 index 地址与匿名函数绑定,只要访问127.0.0.1:8080/index,就能触发这个匿名函数。创建完成后,使用Run()方法运行路由。Run()方法可以传参,参数是端口,不传参的话开启默认端口8080。
2. 请求类型
- GET:获取/请求数据
- POST:上传数据
- PUT:在服务端更新数据
- DELETE:在服务端删除数据
分别对应 GET、POST、PUT、DELETE 方法
r := gin.Default()
r.GET("", func(*gin.Context){})
r.POST("", func(*gin.Context){})
r.PUT("", func(*gin.Context){})
r.DELETE("", func(*gin.Context){})
r.Run()
注意:同一个地址只能绑定不同类型的方法,且类型不能重复。
3. 响应
响应json
type msg struct {
Name string `json:name`
Age int `json:age`
}
r.GET("/json", func(c *gin.Context) {
c.JSON(200, msg{"xxx", 21})
c.JSON(200, gin.H{"xxx": 22})
})
响应json首先需要一个键值对,可以自己定义一个结构体,也可以使用 map ,或者 gin 包里自带的gin.H,gin.H 是map[string]any的别名
响应xml
r.GET("/xml", func(c *gin.Context) {
c.XML(200, msg{"xxx", 21})
c.XML(200, gin.H{"xxx": 22})
})
接口与json一样,使用XML()方法。
响应yaml
r.GET("/yaml", func(c *gin.Context) {
c.YAML(200, msg{"xxx", 21})
c.YAML(200, gin.H{"xxx": 22})
})
同理
4. 参数
请求参数
r.GET("query", func(c *gin.Context) {
user := c.Query("user")
getuser, ok := c.GetQuery("user")
})
当网址为 127.0.0.1/query?user=2 时,可以使用 Query()和GetQuery()方法获取 2 这个结果,后者比前者多了一个 ok 返回值,用于判断参数存不存在。
表单参数
r.POST("form", func(c *gin.Context) {
user := c.PostForm("user")
getuser, ok := c.GetPostForm("user")
})
几乎一样的接口,用于接收表单参数。
动态参数
r.POST("param/:id", func(c *gin.Context) {
user := c.Param("id")
})
在地址后跟:id,id作为动态参数,可以使用Param()方法获取 id 值
原始参数
r.POST("raw", func(c *gin.Context) {
body, err := c.GetRawData()
})
可以用GetRawData()方法获得所有原始数据