Go语言使用swagger生成接口文档的方法
本篇文章向大家介绍《Go语言使用swagger生成接口文档的方法》,主要包括接口文档、swagger,具有一定的参考价值,需要的朋友可以参考一下。
swagger介绍
Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言。Swagger与一组开源软件工具一起使用,以设计、构建、记录和使用RESTful Web服务。Swagger包括自动文档,代码生成和测试用例生成。
在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效率和开发效率。可是编写接口文档历来都是令人头痛的,而且后续接口文档的维护也十分耗费精力。
最好是有一种方案能够既满足我们输出文档的需要又能随代码的变更自动更新,而Swagger正是那种能帮我们解决接口文档问题的工具。
这里以gin框架为例,使用gin-swagger库以使用Swagger 2.0自动生成RESTful API文档。
gin-swagger实战
想要使用gin-swagger为你的代码自动生成接口文档,一般需要下面三个步骤:
- 按照swagger要求给接口代码添加声明式注释,具体参照声明式注释格式。
- 使用swag工具扫描代码自动生成API接口文档数据
- 使用gin-swagger渲染在线接口文档页面
第一步:添加注释
在程序入口main函数上以注释的方式写下项目相关介绍信息。
package main
// @title 这里写标题
// @version 1.0
// @description 这里写描述信息
// @termsOfService http://swagger.io/terms/
// @contact.name 这里写联系人信息
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io
// @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.Run()
}
在你代码中处理请求的接口函数(通常位于controller层)按如下方式写上注释:
// GetPostListHandler2 升级版帖子列表接口
// @Summary 升级版帖子列表接口
// @Description 可按社区按时间或分数排序查询帖子列表接口
// @Tags 帖子相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 用户令牌"
// @Param object query models.ParamPostList false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} _ResponsePostList
// @Router /posts2 [get]
func GetPostListHandler2(c *gin.Context) {
// GET请求参数(query string):/api/v1/posts2?page=1&size=10&order=time
// 初始化结构体时指定初始参数
p := &models.ParamPostList{
Page: 1,
Size: 10,
Order: models.OrderTime,
}
if err := c.ShouldBindQuery(p); err != nil {
zap.L().Error("GetPostListHandler2 with invalid params", zap.Error(err))
ResponseError(c, CodeInvalidParam)
return
}
data, err := logic.GetPostListNew(p)
// 获取数据
if err != nil {
zap.L().Error("logic.GetPostList() failed", zap.Error(err))
ResponseError(c, CodeServerBusy)
return
}
ResponseSuccess(c, data)
// 返回响应
}
上面注释中参数类型使用了object,models.ParamPostList具体定义如下:
// bluebell/models/params.go
// ParamPostList 获取帖子列表query string参数
type ParamPostList struct {
CommunityID int64 `json:"community_id" form:"community_id"` // 可以为空
Page int64 `json:"page" form:"page" example:"1"` // 页码
Size int64 `json:"size" form:"size" example:"10"` // 每页数据量
Order string `json:"order" form:"order" example:"score"` // 排序依据
}
响应数据类型也使用的object,我个人习惯在controller层专门定义一个docs_models.go文件来存储文档中使用的响应数据model。
// bluebell/controller/docs_models.go
// _ResponsePostList 帖子列表接口响应数据
type _ResponsePostList struct {
Code ResCode `json:"code"` // 业务响应状态码
Message string `json:"message"` // 提示信息
Data []*models.ApiPostDetail `json:"data"` // 数据
}
第二步:生成接口文档数据
编写完注释后,使用以下命令安装swag工具:
go get -u github.com/swaggo/swag/cmd/swag
在项目根目录执行以下命令,使用swag工具生成接口文档数据。
swag init
执行完上述命令后,如果你写的注释格式没问题,此时你的项目根目录下会多出一个docs文件夹。
./docs ├── docs.go ├── swagger.json └── swagger.yaml
第三步:引入gin-swagger渲染文档数据
然后在项目代码中注册路由的地方按如下方式引入gin-swagger相关内容:
import ( // liwenzhou.com ... _ "bluebell/docs" // 千万不要忘了导入把你上一步生成的docs gs "github.com/swaggo/gin-swagger" "github.com/swaggo/gin-swagger/swaggerFiles" "github.com/gin-gonic/gin" )
注册swagger api相关路由
r.GET("/swagger/*any", gs.WrapHandler(swaggerFiles.Handler))
把你的项目程序运行起来,打开浏览器访问http://localhost:8080/swagger/index.html就能看到Swagger 2.0 Api文档了。

gin_swagger文档
gin-swagger同时还提供了DisablingWrapHandler函数,方便我们通过设置某些环境变量来禁用Swagger。例如:
r.GET("/swagger/*any", gs.DisablingWrapHandler(swaggerFiles.Handler, "NAME_OF_ENV_VARIABLE"))
此时如果将环境变量NAME_OF_ENV_VARIABLE设置为任意值,则/swagger/*any将返回404响应,就像未指定路由时一样。
总结
本篇关于《Go语言使用swagger生成接口文档的方法》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!
Go 实现热重启的详细介绍
- 上一篇
- Go 实现热重启的详细介绍
- 下一篇
- Golang 如何解析和生成json
-
- 外向的面包
- 这篇技术文章出现的刚刚好,好细啊,赞 ??,mark,关注up主了!希望up主能多写Golang相关的文章。
- 2023-02-07 06:08:21
-
- 雪白的流沙
- 好细啊,码起来,感谢楼主的这篇技术贴,我会继续支持!
- 2023-01-13 05:50:57
-
- 勤奋的小鸭子
- 这篇博文真是及时雨啊,太全面了,写的不错,码起来,关注大佬了!希望大佬能多写Golang相关的文章。
- 2023-01-10 16:55:46
-
- 妩媚的帆布鞋
- 感谢大佬分享,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢师傅分享技术文章!
- 2023-01-05 21:30:53
-
- 高挑的电灯胆
- 细节满满,已加入收藏夹了,感谢作者大大的这篇博文,我会继续支持!
- 2023-01-05 16:42:43
-
- 碧蓝的枕头
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢大佬分享文章内容!
- 2023-01-04 00:11:10
-
- 强健的芹菜
- 这篇文章内容太及时了,太细致了,很棒,码住,关注作者了!希望作者能多写Golang相关的文章。
- 2022-12-31 02:01:56
-
- Golang · Go教程 | 2小时前 | 数字签名 · Go教程 · Go安全 · Go 1.27 crypto/ecdsa PrivateKey.Sign SignerOpts 哈希长度
- Go 1.27 ecdsa.PrivateKey.Sign 为什么检查哈希长度:SignerOpts 约束
- 212浏览 收藏
-
- Golang · Go教程 | 4小时前 | 标准库 · Go教程 · 整数计算 · math/big RoundingMode Go 1.27 整数除法 Int.Divide
- Go 1.27 math/big.Int Divide 怎么选舍入:Trunc、Floor、Round 与 Ceil
- 202浏览 收藏
-
- Golang · Go教程 | 10小时前 | HTTP服务 · Go教程 · 接口设计 · net/http Go 1.27 MaxHeaderValueCount MaxHeaderBytes HTTP安全
- Go 1.27 HTTP 请求头上限怎么设计:MaxHeaderValueCount 与 MaxHeaderBytes 配合
- 376浏览 收藏
-
- Golang · Go教程 | 17小时前 | 标准库 · Go教程 · 工具开发 · 错误定位 · 语法分析 · Go 1.27 go/scanner Scanner.End token.Pos 语法诊断
- Go 1.27 go/scanner.Scanner.End 怎么定位 token 末端:起止位置与诊断范围
- 131浏览 收藏
-
- Golang · Go教程 | 19小时前 | unsafe · Go教程 · Go升级 · go fix Go 1.27 unsafefuncs unsafe.Add
- Go 1.27 unsafefuncs 怎么改旧代码:函数指针转换的审查边界
- 368浏览 收藏
-
- Golang · Go教程 | 22小时前 | go并发 · pprof · 故障排查 · Go教程 · 版本升级 · GODEBUG runtime/pprof Go 1.27 goroutine 标签 tracebacklabels
- Go 1.27 崩溃堆栈为什么多了 goroutine 标签:tracebacklabels 的取舍
- 174浏览 收藏
-
- Golang · Go教程 | 23小时前 | 网络编程 · HTTP · go · 性能 · 连接复用 Go 1.27 http.Response.Body Response.Body.Close
- Go 1.27 http.Response.Body 关闭会自动排空什么:连接复用与异常边界
- 311浏览 收藏
-
- Golang · Go教程 | 23小时前 | 标准库 · go · Go 1.27 · 并发测试 · HTTP 测试 · testing/synctest Go 1.27 httptest.NewTestServer Go 并发测试 内存网络
- Go 1.27 httptest.NewTestServer 怎么接 synctest:内存测试网络的适用范围
- 184浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 51次使用
-
- Gradio
- Gradio是一个用于构建机器学习和数据科学Web应用的开源Python库。支持快速创建交互界面,获Google、Meta等大厂青睐,适合模型演示、部署反馈及调试。
- 49次使用
-
- AutoGPT
- AutoGPT是基于GPT-4的开源AI代理平台,拥有超10万GitHub星标。本文介绍其低代码界面、自动化工作流功能、系统配置要求及安装步骤,助您高效部署和管理AI Agent。
- 48次使用
-
- 腾讯扣叮
- 腾讯扣叮是腾讯推出的6-18岁青少年编程学习平台,依托游戏与AI技术,提供图形化编程、3D创作、虚拟实验室及丰富赛事课程,助力培养计算思维与创新能力。
- 51次使用
-
- 堆友AI学习
- 堆友AI学习是堆友推出的专业AI设计教育平台,提供从基础到进阶的线上课程及线下实训营。结合阿里国际AITIC认证,通过视频教程、笔记分享和实战案例,帮助设计师掌握AIGC技能,提升职业竞争力。
- 51次使用
-
- goswagger生成接口文档使用教程
- 2022-12-30 423浏览
-
- golang组件swagger生成接口文档实践示例
- 2022-12-29 416浏览
-
- golang 中请求参数为Json 的 Swag 怎么实现呀?
- 2023-01-07 211浏览
-
- Postman 导入 OpenAPI 并导出 Collection:把接口文档变成可共享调试集合
- 2026-06-27 363浏览

