go-swagger使用——自动生成web api

最近打算用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的
go-swagger使用——自动生成web api_第1张图片
go-swagger使用——自动生成web api_第2张图片
解决办法是使用这个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

你可能感兴趣的:(go,golang)