跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Golang怎么做Swagger自动生成_Golang swag教程【基础】

swag init 失效主因是路径、注释、扫描范围三者不匹配:须在 go.mod 目录执行,handler 上方需完整 // @Summary 注释,分散路由要加 -d ./ 指定扫描目录。 swag init 命令不生效?先看这三件事 绝大多数
swag init
失败,不是工具没装好,而是它根本没“看见”你的接口函数。它不运行代码,只静态扫描注释和函数签名,路径、入口、注释格式缺一不可。 必须在项目根目录执行——即
go.mod
所在目录,否则
swag
解析不了 import 路径,报错类似
no required module provides package
所有 handler 函数上方必须有完整注释块,且第一行是
// @Summary
;中间不能空行、不能缩进、不能用
/* */
,否则整个函数被跳过 如果路由定义分散在
internal/router/
等非根目录,加
-d ./
显式指定扫描范围,别依赖默认行为 为什么 /swagger/index.html 404?不是路由没注册,是文件没挂对 Gin 不会自动托管
docs/
下的前端资源,
router.Static("/swagger", "./docs")
是错的——Swagger UI 是单页应用(SPA),所有子路径如
/swagger/swagger-ui.css
都要由同一个 handler 处理,否则 404。 必须用
ginSwagger.WrapHandler(swaggerFiles.Handler)
,且路由写成
router.GET("/swagger/*any", ...)
,
*any
不能省 确保
docs/docs.go
已生成,并在 main 包中被 import(Gin-Swagger 依赖它读取注释元数据) 别把
docs/
当普通静态目录挂载;也别手动复制
swagger.json
到 public 目录下——它会被
docs.go
动态注入内存 @Param 和 @Success 不显示字段?问题不在函数签名,在结构体 tag
swag
不反射结构体字段,也不猜你传的是 body 还是 query,它只认注释 +
json:
tag。没 tag 的字段,哪怕导出、哪怕首字母大写,也不会出现在文档里。
@Param id path int true "用户ID"
中的
path
必须小写,写成
Path
或
PATH
就失效
@Success 200 {object} User
中的
User
必须是导出类型,且每个字段要有
json:"user_name"
;
json:"-"
字段直接跳过 嵌套结构体也要逐层加
json:
tag,比如
Address *Address `json:"address"`
,否则深层字段为空
time.Time
字段建议显式加
time_format:"2006-01-02T15:04:05Z"
,否则文档可能显示为数字时间戳 上线后 Swagger 页面空白或加载超时?别让 docs/swagger.json 暴露出去
docs/swagger.json
是纯文本 OpenAPI 文件,里面包含所有接口路径、参数名、错误码、甚至注释里的调试说明。开发期方便,生产环境就是信息泄露风险点。 go语言参考手册 中文CHM版 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译 下载 立即学习 “ go语言免费学习笔记(深入) ”; 上线前务必移除或条件编译掉
router.GET("/swagger/*any", ...)
这行注册代码 如果内部运维平台真需要保留,至少加 IP 白名单中间件或 Basic Auth,不能裸奔 用
swag init -o ./docs_prod
把文档输出到独立目录,配合构建脚本排除进生产镜像,避免误打包 复杂点从来不在命令怎么敲,而在于 swag 只做静态分析——它看不到 vendor、不执行 init、不理解 interface 实现,所有依赖都得靠
go list
能解析出来。CI/CD 里记得先
go mod download
,不然它连基础 struct 都找不到。

相关文章