0 前言
这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
对于大项目,目前的计划是采用 gin+gorm+mysql 的形式,所以学习gin的用法是很有必要的,在此记录一些我在学习gin时遇到的困惑和解答。
1 什么是 gin
引用官网的说法:
Gin是一个使用Go语言开发的Web框架。
它提供类似Martini的API,但性能更佳,速度提升高达40倍。
如果你是性能和高效的追求者, 你会爱上 Gin。
Gin作为一个成熟的web框架,支持高并发还拥有极高的性能,可以让我们在开发web应用时事半功倍,更加专注于业务逻辑的处理上。
2 如何使用 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 上启动服务
}
从上面这段代码我们看出Gin的启用大致可以分为三个步骤:
- 初始化路由
- 为不同的HTTP请求设置相应的处理函数
- 监听指定地址和端口,并在其基础上启用服务
可以看出Gin的使用是非常快速且便捷的
3 路由的初始化
在使用 gin.Default()/gin.new() 之前,我们可以通过 gin.SetMode(MODE) 进行模式的设置。通过查看SetMode的源码我们可以知道一共有三种模式
// SetMode sets gin mode according to input string.
func SetMode(value string) {
if value == "" {
value = DebugMode
}
switch value {
case DebugMode:
ginMode = debugCode
case ReleaseMode:
ginMode = releaseCode
case TestMode:
ginMode = testCode
default:
panic("gin mode unknown: " + value + " (available mode: debug release test)")
}
modeName = value
}
分别是:
- DebugMode
- ReleaseMode
- TestMode
其中Debug模式下Gin框架会打印出接收到的请求以及一些log信息,而release模式下则不会,默认采用Debug模式
4 设置处理函数
首先我们可以通过 Group 方法去对路由进行分组,将公共的路径提取出来,例如:
r := gin.Default()
apiRouter := r.Group("/douyin")
apiRouter.GET("/feed/", Feed)
apiRouter.POST("/user/login/", Login)
则 GET "/douyin/feed" 请求会交由Feed函数进行处理,类似的 POST "/douyin/user/login" 请求则会交给Login函数进行处理
5 路由地址的监听
我们可以通过在 run() 中输入ip地址和端口选择服务监听的地址, 如:
r.Run("127.0.0.1:8080")