这是我参与「第五届青训营 」伴学笔记创作活动的第 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 init
、govendor 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()
创建路由时,实际上是启用了中间件创建,其中默认启用的中间件是已连接记录器和恢复中间件的引擎实例,即 Logger 和 Recovery 中间件。
另外,如果项目需要使用自定义日志中间件时,可以考虑没有Logger中间件绑定的
gin.New()
,具体引入中间件的使用方法为Use(日志中间件)
。Gin 还提供了一些额外的 Recovery中间件,如 CustomRecovery 和 RecoveryWithWriter, Recovery()是这两个中间件的封装,如果项目需要额外扩张使只需自定义ioWriter或handle即可使用RecoveryWithWriter来完成。