「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
gin 框架
基于前面的基础学习后,来实践一下,搭建一个简易的服务。Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,自带的net/http足够简单,性能也非常不错。所以字节使用 Gin 框架搭建一个服务。
创建项目目录
- src 存放源代码
- pkg 编译后生成的文件 (由go install 生成)
- bin 编译后生成的可执行文件(由go install 生成)
创建main 文件
func main() {
r := gin.Default()
r.GET("/test", func(c *gin.Context) {
c.JSONP(200, gin.H{
"message": "hello",
})
})
r.Run(":8001")
}
使用 gin 框架实现一个 web 服务,使用 Default 方法 创建了一个路由,再绑定路由规则和路由函数,其中 gin.Context上下文中封装了request 和 response 。最后启动路由的Run方法监听端口。
路由
gin 框架中采用的路由库是基于httprouter实现的,基本httpRouter有的功能 gin 都能支持,但是不支持路由正则表达式
r.GET("/", func(c *gin.Context) {
c.String(http.StatusOK, "hello word")
})
r.POST("/xxxpost",getting)
r.PUT("/xxxput")
r.PATCH("....")
路由分组
go中提供了对路由分组,主要为了多个路由进行统一的处理,例如统一的前缀,统一的中间件等。使用函数 router.Group()
完成分组的创建。创建时可以提供路径前缀和公用中间件。
v1 := router.Group("/v1")
v1.GET("/login", func(c *gin.Context) {
c.String(http.StatusOK, "v1 login")
})
v2 := router.Group("/v2")
v2.GET("/login", func(c *gin.Context) {
c.String(http.StatusOK, "v2 login")
})
中间件
中间件是一种处理器。主要用于在多个业务逻辑中间重用代码,例如认证校验,日志处理等。中间件只对注册过的路由函数起作用.中间件分为全局中间件,单个路由中间件和群组中间件。
全局中间件
r := gin.Default()
r.use(中间件函数)
单个路由中间件
r.Get("/api/v2/list", middleware(),func(c *gin.Context){
....
})
群组中间件
authorized := router.Group("/", MyMiddelware())
// 或者这样用:
authorized := router.Group("/")
authorized.Use(MyMiddelware())
{
authorized.POST("/login", loginEndpoint)
}