热启动
Gin框架的热启动,我一般用fresh和air,记录一下安装过程。
在没有 fresh 之前,启动项目使用的是 go run main.go,在使用 fresh 后,启动项目按照如下的命令。
fresh
- fresh
go install github.com/pilu/fresh@latest
然后使用fresh
命令就会在改动文件之后自动更新
Air 是一个用于在开发过程中实时重新加载 Go 应用程序的工具。它通过监视文件变化来自动重新编译和重新启动应用程序,从而使开发过程更加高效。
air
- air
go install github.com/cosmtrek/air@latest
安装完成之后在项目根目录有个air.toml
文件,如果有想要排除的文件夹,在air.toml
exclude_dir = ["vendor", "node_modules", "log"]
,比如我想排除掉testdata,在testdata中修改任何文件都不再热更新,添加testdata 到 exclude_dir中即可。
swagger 文档
安装
- go install github.com/swaggo/swag/cmd/swag@latest 安装最新版的swagg,注意最新版的swagger需要安装go 1.20版本
再安装其他的包 - go get -u github.com/swaggo/gin-swagger
- go get -u github.com/swaggo/files
第一步:然后需要main.go中main函数上面添加如下
// @title gvb_server API文档
// @version 1.0
// @description gvb_server API文档
// @host 127.0.0.1:8081
// @Basepath /
title 代表swagger的名字
version是版本
description 是描述
host 是项目启动的 地址和端口
Basepath 就写 /就好
第二步 在router文件中增加
import (
swaggerFiles "github.com/swaggo/files"
gs "github.com/swaggo/gin-swagger"
)
...
router := gin.Default()
router.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))
第三步 在控制器的方法上增加注释
比如:
// AdvertListView 广告列表
// @Tags 广告列表
// @Summary 广告列表
// @Description 广告列表
// @Param limit query models.PageView false ""
// @Param page query models.PageView false "表示多个参数"
// @Router /api/advert [get]
// @Produce json
// @Success 200 {object} res.Response{data=res.ListResponse[models.AdvertModel]}
func (AdvertApi) AdvertListView(c *gin.Context) {
var request models.PageView
err := c.ShouldBindQuery(&request)
referer := c.GetHeader("Referer")
isShow := true
fmt.Println(referer)
if strings.Contains(referer, "admin") {
//admin来的
isShow = false //等于false gorm会忽略
}
if err != nil {
res.FailWithCode(res.ArgumentError, c)
return
}
//判断referer 是否包含admin 如果是,就全部返回,不是,就返回is_show=true,
list, count, _ := common.ComList(models.AdvertModel{IsShow: isShow}, common.Option{
PageView: request,
})
if err != nil {
global.Log.Error(err)
res.FailWithMessage("添加广告失败", c)
return
}
res.OkWithList(list, count, c)
}
// @Tags 显示在swagger的标题
// @Summary 显示在swagger 概括
// @Description 显示在swagger描述
// @Param limit query models.PageView false "每页显示多少条"
// @Param page query models.PageView false "页码" (这里是参数的注释)
// @Router /api/advert [get] (这里是路由和请求方法)
// @Produce json
// @Success 200 {object} 返回值
第四步 生成docs文件
执行 swag init
会在docs
文件夹中生成3个文件:
docs.go、swagger.json、swagger.yaml
注意:每次新增一个方法都要重新执行一下swag init 命令,以便生成新的文档。
第五步 启动项目,使用fresh或者air