go使用条件编译的形式集成swagger
安装 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