DAY-09 入门Go项目4 | 青训营笔记

46 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

初识 Go 语言Web框架

一、Gin——轻量级框架

概要及特点介绍

Gin 是基于 go 语言常用的一种Web框架,具有简单易用高性能适用于生产环境等特点。在 Gin 框架中,路由使用基数树实现,路由组织方面无限制嵌套而不影响性能,占用内存低且不使用反射;在中间件注册层面,一个请求可以被一系列的中间件和最后的action处理;在崩溃处理方面,Gin 可以捕获panic使应用程序可用。

Gin的安装

Gin 和项目模板可以从Github上git下来,使用命令go get -u github.com/gin-gonic/gin来安装该框架。

另外,尽量使用包管理工具govendor来安装:

使用命令:go get github.com/kardianos/govendor来安装 Govendor。

接着创建 Gin 项目文件夹:GOPATH/src/github.com/myusername/project

然后在项目目录下初始化 Gin 项目并添加 Gin 1.8.2: govendor initgovendor fetch github.com/gin-gonic/gin@v1.8.2

共官方模板库里复制模板到项目:curl https://raw.githubusercontent.com/gin-gonic/gin/master/examples/basic/main.go > main.go

运行该项目:go run main.go

Gin 的初始化及中间件

Gin 的初始化及简单使用

下面是 Gin 初始化充当路由功能及启动的代码示例:

func main() {
    // 初始化 Gin
    router := gin.Default()
    // 使用路由器 GET、POST
    router.GET("/getXXX", getting)
    router.POST("/postXXX", posting)
    // 定义启动端口并启动
    router.Run("8081")
}

中间件

中间件是在请求前后完成指定的某些逻辑过程,如登录验证或日志的打印,因此中间件能够将接口逻辑划分开来并与业务代码分离。

  • 中间件函数的定义其实和普通请求接口的定义是一样的。

  • 中间件的作用顺序:定义在前先生效调用,可定义多个中间件。

  • 中间件分为3类作用域:全局中间件——对所有请求接口都有效、group中间件——对该组的接口有效、单个接口级别中间件——只对该接口有效

回到刚刚的代码示例,通过阅读源码可以发现,在项目中使用gin.Default()创建路由时,实际上是启用了中间件创建,其中默认启用的中间件是已连接记录器恢复中间件的引擎实例,即 LoggerRecovery 中间件。

另外,如果项目需要使用自定义日志中间件时,可以考虑没有Logger中间件绑定的gin.New(),具体引入中间件的使用方法为Use(日志中间件)

Gin 还提供了一些额外的 Recovery中间件,如 CustomRecoveryRecoveryWithWriter, Recovery()是这两个中间件的封装,如果项目需要额外扩张使只需自定义ioWriter或handle即可使用RecoveryWithWriter来完成。