Gin框架热启动和Swagger文档植入

热启动

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

第六步 访问 http://ip:port/swagger/index.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注