【Golang 计划】06 Go 实践-搭建简易服务

159 阅读2分钟

「这是我参与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)
}