安装 swag-go 的依赖

首先在项目根目录安装 swag-go 的依赖:

go install github.com/go-openapi/swag

并在项目根目录执行生成 swagger 文档命令

swag init

在 routers 包内创建 swagger.go:

//go:build doc
// +build doc

/**
* 注意条件编译注释 //go:build doc 只能出现在代码文件的最顶部(这是Go 1.17的新的条件编译语法),不建议再使用//+build doc 旧的条件编译语法
*/
package routers

import (
\_ "demo/docs"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)

func init() {
swagHandler = ginSwagger.WrapHandler(swaggerFiles.Handler)
}

然后创建 router.go:

package routers

import (
"github.com/gin-gonic/gin"
)

var swagHandler gin.HandlerFunc

func InitRouter() \*gin.Engine {

router := gin.New()

// api group 的路由
api := router.Group("/api")

api.Use(gin.Logger())
api.GET("/users", GetUserList)

if swagHandler != nil {
router.GET("/swagger/\*any", swagHandler)
}
return router

}

然后创建 main.go:

package main

import (

"flag"
"fmt"
"demo/routers"
)

func main() {

var name = ""

var host = "0.0.0.0"

var port int

flag.StringVar(&name, "s", "Gin", "service name")

flag.StringVar(&host, "h", "0.0.0.0", "host")

flag.IntVar(&port, "p", 8080, "port")

flag.Parse()
flag.Usage()

router := routers.InitRouter()

// // 支持静态文件及路径
// staticDir := "web"
// router.StaticFS("/static", http.Dir(staticDir))
// router.StaticFS("/doc", http.Dir("doc"))

fmt.Printf("[%s] listening on %s:%d\n", name, host, port)

// url := ginSwagger.URL(fmt.Sprintf("/swagger/doc.json")) // The url pointing to API definition
// // swagger group 的路由
// router.GET("/swagger/\*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))
router.Run(fmt.Sprintf("%s:%d", host, port))
}

运行带有 swagger 文档的命令

go run -tags=doc .

构建带有 swagger 文档的命令

go build -tags=doc .

运行不带有 swagger 文档的命令

go run .

构建不带有 swagger 文档的命令

go build .

说明: 当前这个示例项目不包含 swagger 文档的编译结果是 15MB,包含 swagger 文档的编译结果是 28MB