最近打算用go重写自己的网站,想着找一个自动生成API的网站,大家一致推荐go-swagger,想着一个库应该很简单的使用,本来想着简单的事情看看国内网站教程就好了,谁知道道路太坎坷了。本篇不讲swagger原理,只讲在安装过程遇到了那些问题,针对go小白。
大多数人说的是go get swagger,在早期go get是可以直接生成二进制可执行文件的,我的go版本是1.18,大概是在go1.16出现了go install,go get只不过是获得了源码而没有编译生成相应的可执行文件,看别人swag init的时候,我疯狂报不知道swag是啥,我第一反应是没添加到环境变量中,全局搜swag,发现没有这个可执行文件。这也就是说明了并没有生成可执行文件,突然想到了之前看见的go install,在1.16之后get只获取源码不生成二进制文件,所以如果你的go版本是在1.16之后的时候,不应该使用go get了应该使用go install 生成二进制文件
go install github.com/swaggo/swag/cmd/swag
还有一点注意的是,很多博客引入的是这个文件,他现在改名了并不是这样import的
解决办法是使用这个import swaggerFiles "github.com/swaggo/files"
至于其他属性,就自己学一学吧,这里就不赘述了
附上一个简易版的能跑起来的代码,不含逻辑处理,_ "swawgger/docs"
这个包名讲一下,swagger是go.mod的名字,这个是把swag init 的内容导入进来。
package main
import (
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
gs "github.com/swaggo/gin-swagger"
_ "swawgger/docs" // 千万不要忘了导入把你上一步生成的docs
)
// @title API文档
// @version 1.0
// @description 怕自己忘记了,记录一下
// @BasePath /api/v1
// @contact.name dxgzg
// @contact.url http://dxgzg.site
// @contact.email [email protected]
// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html
// @host 这里写接口服务的host
// @BasePath 这里写base path
func main() {
r := gin.New()
// liwenzhou.com ...
r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))
r.Run()
}
// ShowAccount godoc
// @Summary Show an account
// @Description get string by ID
// @Tags accounts
// @Accept json
// @Produce json
// @Param id path int true "Account ID"
// @Router /accounts/{id} [get]
func ShowAccount(ctx *gin.Context) {
}
// second godoc
// @Summary Show an account
// @Description get string by ID
// @Tags accounts
// @Accept json
// @Produce json
// @Param id path int false "Account ID"
// @Router /second/id [get]
// @Success 200 {object} string
func second(ctx *gin.Context) {
}
如果不清楚怎么使用的推荐看这篇博客使用go-swagger