什么是Gin
Gin是一个使用Go语言开发的Web框架。
Gin的重要技术
-
路由和参数传递: Gin 提供了灵活的路由定义方式,支持参数的传递。通过路径参数和查询参数,你可以轻松地获取 URL 中的数据。
-
中间件的应用: Gin 的中间件允许你在请求到达处理器之前或之后执行逻辑。这可以用于身份验证、日志记录、错误处理等任务。
-
JSON 和绑定: Gin 内置了对 JSON 数据的解析和生成支持,使得处理 JSON 请求和响应变得非常方便。同时,你可以使用绑定功能将请求参数绑定到 Go 结构体中。
-
静态文件服务: Gin 可以方便地提供静态文件服务,如图片、CSS、JavaScript 等。这在构建前端界面时非常有用。
安装
$ go get -u github.com/gin-gonic/gin
样例
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
上述代码创建了一个默认的服务器,并且默认带有Logger和Recovery中间件。然后通过Http方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境。
除了GET方法,gin也支持POST、PUT、DELETE、OPTION等常用的restful方法。
0.0.0.0表示所有的IP地址。 如果监听的IP地址设置了 0.0.0.0 ,就表示这个服务器监听在本机的所有IP地址上,通过任何一个IP地址都可以访问到。
然后run方法开启监听。通过访问本机的8080端口即可获得响应。
{
"message": "pong"
}
路由分组
//v1路由组
v1 := router.Group("/v1")
{
v1.GET("/login", loginEndpoint)
v1.GET("/submit", submitEndpoint)
v1.GET("/read", readEndpoint)
}
//v2组路由
v2 := router.Group("/v2")
{
v2.GET("/login", loginEndpoint)
v2.GET("/submit", submitEndpoint)
v2.GET("/read", readEndpoint)
}
获取API参数
api 参数通过Context的Param方法来获取。例如:
router.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, name)
})
获取Query参数
Query 参数通过 DefaultQuery 或 Query 方法获取。
区别:
-
使用
DefaultQuery方法读取参数,其中当参数不存在的时候,可以设置默认值。 -
使用
Query方法读取正常参数,当参数不存在的时候,返回空字串。
获取form表单参数
通过DefaultPostForm和PostForm方法获取。
同样DefaultPostForm方法可以指定默认值。
获取JSON参数
通过BindJSON方法绑定对应的结构体即可。
响应类型
字符串
r.GET("/string", func(c *gin.Context) {
c.String(http.StatusOK, "返回字符串")
})
json
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
xml和yaml类似
html
例如有一个index.html模板。
然后通过r.LoadHTMLFiles("html/index.html")加载这个模板文件,这样我们才能使用它。
然后定义路由
r.GET("/html", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", gin.H{"title": "Main website"})
})
文件
在golang中,没有相对文件的路径,它只有相对项目的路径。
router.StaticFile("/photo.png", "static/photo.png"),其中第一个参数是网页请求的路由,第二个参数是文件的路径。
中间件
Gin的中间件,其实就是Gin定义的一个HandlerFunc,通过中间件,我们可以对一组 API 接口进行统一的操作,可以很方便的拦截请求,来做一些我们需要做的事情,比如日志记录、授权校验、各种过滤等等。
gin.Default()默认使用了Logger和Recovery中间件。
- Logger中间件将日志写入gin.DefaultWriter。
- Recovery中间件会recover任何panic。如果有panic的话,会写入500响应码。