先安装go-swagger
go get github.com/go-swagger/go-swagger
cd go-swagger
go install ./cmd/swagger
swag init
可以生成swagger信息,在项目根目录下面的docs文件夹下:
main函数入口放上swagger基本信息
// @title VPN
// @version 1.0
// @description null
// @host 192.168.33.2:8080
// @BasePath /
func main() {
// 引用数据库
db.InitDb(false)
// 引入路由组件
routers.InitRouter()
}
这里放得信息一般是
这个位置的信息
在路由位置处
安装依赖
go get swaggerFiles "github.com/swaggo/files"
go get "github.com/swaggo/gin-swagger"
加上:
r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))
重要的来了
要在routers文件上加上刚刚生成的docs文件路径
_ "awesomeProject/docs"
package routers
import (
"awesomeProject/api/user"
_ "awesomeProject/docs"
"awesomeProject/middleware"
"awesomeProject/utils"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
gs "github.com/swaggo/gin-swagger"
)
func InitRouter() {
//r := gin.New()
r := gin.Default()
auth := r.Group("api")
{
//login
//auth.GET("login/", api.GetUserInfo)
auth.GET("test", func(context *gin.Context) {
context.JSON(200, "Hello World!")
})
auth.POST("register", user.Register)
auth.GET("captcha", user.Captcha)
auth.POST("login", user.Login)
}
router := r.Group("test")
router.Use(middleware.JwtToken())
{
router.GET("test", func(context *gin.Context) {
context.JSON(200, "Hello World!")
})
}
r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))
_ = r.Run(utils.HttpPort)
}
在具体请求上加上信息
// @Summary Register
// @Tags user
// @version 1.0
// @Success 200
// @Param user body string true "username,password,uid" maxlength(100)
// @Failure 500
// @Router /api/register [post]
func Register(c *gin.Context) {
var user model.User
temp, _ := ioutil.ReadAll(c.Request.Body)
json.Unmarshal([]byte(temp), &user)
fmt.Println(user)
//是否存在
getUser, _ := db.UserDao.GetUser(user.Username)
if getUser.Username != "" {
c.JSON(http.StatusOK, gin.H{
"code": errmsg.ERROR_USERNAME_USED,
"message": errmsg.GetErrMsg(errmsg.ERROR_USERNAME_USED),
})
return
}
//校验用户名
userNameMsg, userNameValidCode := util.CheckUserName(user.Username)
if userNameValidCode != errmsg.SUCCESS {
c.JSON(
http.StatusOK, gin.H{
"code": userNameValidCode,
"message": userNameMsg,
},
)
c.Abort()
return
}
校验密码
err := util.CheckPassword(user.Password)
if err != nil {
c.JSON(
http.StatusOK, gin.H{
"code": errmsg.ERROR_PASSWORD_INVALID,
"message": errmsg.GetErrMsg(errmsg.ERROR_PASSWORD_INVALID),
},
)
c.Abort()
return
}
//注册
code := service.CreateUser(user)
c.JSON(
http.StatusOK, gin.H{
"code": code,
"message": errmsg.GetErrMsg(code),
},
)
}
对于具体的注释
这里推荐文章go-swagger注释
其他的坑
如果访问http://localhost:8080/swagger/index.html
会出现下图这种情况
那就是刚刚上文提到的routers文件没有import生成的docs路径