Gin框架使用入门
Gin是一个使用Go语言编写的HTTP Web框架,它拥有极高的性能和简洁明快的语法,在Go语言开发社区中非常受欢迎。Gin的API简单易用,对初学者十分友好,而且提供了中文文档,容易上手。
Gin的初始化
我们可以十分方便快速地使用Gin完成一个接口的编写。
func main() {
router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "Hello World")
})
router.Run(":8080")
}
router := gin.Default():按照默认配置初始化路由并返回一个Engine实例,用router来接受指针。
然后通过router.Get方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到了gin.Context的上下文环境中,让代码更加简洁。
最后启用路由的Run方法开始监听端口。还可以用net\http包中的http.ListenAndServe(":8080", router)启动监听(事实上,Run方法就是对net\http包中的ListenAndServe方法的进一步封装),或者自定义HTTP服务器配置。默认Gin会把Web服务运行在本机的0.0.0.0:8080端口上,这样内网都可以访问,如果你只想本机访问,可以改成router.Run("127.0.0.1:8080")。
请求
Gin支持Rest风格的API,意思即为在客户端与Web服务器之间进行交互通信的时候,使用HTTP协议中的4个请求方法代表不同的动作。
GET获取资源POST新建资源PUT更新资源DELETE删除资源 Rest风格的API也是前后端分离架构中最常见的风格。
请求参数
为了方便地从请求中获取参数,Gin框架提供了一系列的方法。
查询参数Query
下面是几个典型的取得Query的方法。
c.Query("key")如果存在对应的键的话,获取其值;否则返回空值。c.GetQuery("key")"和Query()类似,但它有两个返回值。如果在"key"键,(即使所对应的值是空字符串),它也会返回该值和True,否则它会返回("", false)。c.QueryArray("key")为给定的查询键返回一组字符串的切片。切片的长度取决于给定键所对应的值的数量。c.DefaultQuery("key", "none")和Query()类似,但是如果不存在对应的键的话,会返回指定的defaultValue字符串,本例中为none。
动态参数Param
router.GET("/user/:id", func(c *gin.Context) {
id := c.Param("id")
})
c.Param("key")返回URL参数的值,上例中,加入向/user/john发送一个Get请求,则会得到id == "john"。
表单参数PostForm
c.PostForm可以接收multipart/form-data和application/x-www-form-urlencoded类型的表单,PostForm从表单返回指定的键(如果存在)所对应的值,否则返回空字符串("")。c.GetPostFormGetPostForm类似于PostForm。当指定的键存在(即使该值是空字符串)时,返回对应的值和True,否则返回("", false)。c.PostFormArray为给定的查询表单的键返回一组字符串的切片。切片的长度取决于给定键所对应的值的数量。
原始参数GetRawData
c.GetRawData获取客户端提交的请求体信息(原始数据)。
func bindJson(c *gin.Context, obj any) (err error) {
body, _ := c.GetRawData()
contentType := c.GetHeader("Content-Type")
switch contentType {
case "application/json":
err = json.Unmarshal(body, &obj)
if err != nil {
fmt.Println(err.Error())
return err
}
}
return nil
}
获取请求头参数
c.GetHeader大小写不分,且返回切片中的第一个数据。(事实上就是http包里c.Request.Header.Get(key)的封装。)