swag init 失效主因是路径、注释、扫描范围三者不匹配:须在 go.mod 目录执行,handler 上方需完整 // @Summary 注释,分散路由要加 -d ./ 指定扫描目录。
swag init 命令不生效?先看这三件事
绝大多数
失败,不是工具没装好,而是它根本没“看见”你的接口函数。它不运行代码,只静态扫描注释和函数签名,路径、入口、注释格式缺一不可。
必须在项目根目录执行——即
所在目录,否则
解析不了 import 路径,报错类似
所有 handler 函数上方必须有完整注释块,且第一行是
;中间不能空行、不能缩进、不能用
,否则整个函数被跳过
如果路由定义分散在
等非根目录,加
显式指定扫描范围,别依赖默认行为
为什么 /swagger/index.html 404?不是路由没注册,是文件没挂对
Gin 不会自动托管
下的前端资源,
是错的——Swagger UI 是单页应用(SPA),所有子路径如
都要由同一个 handler 处理,否则 404。
必须用
,且路由写成
,
不能省
确保
已生成,并在 main 包中被 import(Gin-Swagger 依赖它读取注释元数据)
别把
当普通静态目录挂载;也别手动复制
到 public 目录下——它会被
动态注入内存
@Param 和 @Success 不显示字段?问题不在函数签名,在结构体 tag
不反射结构体字段,也不猜你传的是 body 还是 query,它只认注释 +
tag。没 tag 的字段,哪怕导出、哪怕首字母大写,也不会出现在文档里。
中的
必须小写,写成
或
就失效
中的
必须是导出类型,且每个字段要有
;
字段直接跳过
嵌套结构体也要逐层加
tag,比如
,否则深层字段为空
字段建议显式加
,否则文档可能显示为数字时间戳
上线后 Swagger 页面空白或加载超时?别让 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语言免费学习笔记(深入)
”;
上线前务必移除或条件编译掉
这行注册代码
如果内部运维平台真需要保留,至少加 IP 白名单中间件或 Basic Auth,不能裸奔
用
把文档输出到独立目录,配合构建脚本排除进生产镜像,避免误打包
复杂点从来不在命令怎么敲,而在于 swag 只做静态分析——它看不到 vendor、不执行 init、不理解 interface 实现,所有依赖都得靠
能解析出来。CI/CD 里记得先
,不然它连基础 struct 都找不到。
swag initgo.modswagno required module provides package// @Summary/* */internal/router/-d ./docs/router.Static("/swagger", "./docs")/swagger/swagger-ui.cssginSwagger.WrapHandler(swaggerFiles.Handler)router.GET("/swagger/*any", ...)*anydocs/docs.godocs/swagger.jsondocs.goswagjson:@Param id path int true "用户ID"pathPathPATH@Success 200 {object} UserUserjson:"user_name"json:"-"json:Address *Address `json:"address"`time.Timetime_format:"2006-01-02T15:04:05Z"docs/swagger.jsonrouter.GET("/swagger/*any", ...)swag init -o ./docs_prodgo listgo mod download