前言
和当初选择python的flask框架一样,在学习golang+web的时候选择同样了相对轻量的gin框架,然而在实际学习开发中,gin并没有那么好用,原因在于没有自动重载和swagger文档,好在都有解决方案,参考多个文档之后,实现了自动重载并更新swagger文档的功能。
Swagger文档
go get -u github.com/swaggo/swag/cmd/swag
首先安装swag命令,会下载在GOPATH中的bin目录下swag可执行文件,如果没有GOPATH没有配置到环境变量中,可以做一个软链接
ln -s <yourpath>/swag /usr/local/bin/swag
在gin项目根目录下执行
swag init
会生成docs文件夹,文件夹下有swagger.json,这就是我们要的文档。
在配置路由的方法中,加入swagger的路由配置
package routers
import (
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
func AddSwaggerRouter(r *gin.Engine) {
r.StaticFile("swagger.json", "./docs/swagger.json")
url := ginSwagger.URL("http://127.0.0.1:8080/swagger.json")
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
}
将docs目录下的swagger.json文件配置成静态文件,然后将其静态文件对应的url传入到swagger路由中,这样swagger页面读取json文件就是我们指定的文件,官方文档中的配置指定的url是“/swagger/doc.json”,有一定的滞后,所以选定自己的swagger.json
这个时候访问http://127.0.0.1:8080/swagger/index.html就可以看到swagger界面。至于文档的生成规则另行百度。。。。。
Air自动重载
go get -u github.com/cosmtrek/air
安装方式和上面的swag命令相同,为了实现自动重载和自动更新swagger文档的功能,需要我们自己进行一些配置文件
root = "."
tmp_dir = "tmp"
[build]
cmd = "go build -o ./tmp/main ./main.go"
bin = "tmp/main"
full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
include_ext = ["go"]
exclude_dir = ["vendor", "docs"]
exclude_file = []
stop_on_error = true
log = "air_error.log"
[log]
time = true
[color]
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"
[misc]
clean_on_exit = true
在gin项目的根目录下创建 .air.conf文件,并键入上述内容,会在main.go的同级目录下创建tmp文件用于存储构建之后的可执行文件。有一点注意的是exclude_dir的配置,其中docs是swag init命令的产生的swagger.json文件
然后是每次启动时,更新swagger.json文件,在main.go中的init函数中执行swag init系统命令
cmd := exec.Command("swag", "init")
err := cmd.Run()
if err != nil {
panic(err)
}
fmt.Println("swagger.json生成成功")
如果air的配置文件没有忽略docs,会一直重启服务,更新docs下的文件,再重启死循环
启动的时候就直接在项目的根目录启动,用air命令,会直接找到统计目录下的.air.conf配置文件,当然也可以自行指定配置文件
到这里,基本上就已经完成了gin开发环境的搭建。