Go-Swagger能否为多工作区统一生成Swagger规范?
在Go工作区生成统一Swagger规范的可行方案
场景说明
你的项目采用Go工作区管理多个独立服务,每个服务可单独生成Swagger规范,但需要聚合为一个统一的规范文件。之前尝试根目录创建main文件导致main重复声明,直接执行swagger generate spec生成空文件,希望找到无需脚本合并的直观方案。
可用方案
方案1:创建独立的文档聚合模块
- 在工作区根目录新建一个模块(比如
docs-aggregator),执行go mod init docs-aggregator完成初始化 - 在该模块内创建一个非main包的文件(例如
aggregator.go),导入所有服务中包含Swagger注解的业务包而非main包,示例代码:
package docsaggregator import ( _ "your-workspace-path/Subfolder/workspace1/api" // 替换为实际业务包路径 _ "your-workspace-path/Subfolder/workspace2/api" _ "your-workspace-path/Subfolder/workspace3/api" )
- 进入
docs-aggregator目录,执行swagger generate spec -o swagger.yml --scan-models,工具会扫描所有导入包的Swagger注解,生成统一规范文件
方案2:使用swagger命令多模块扫描参数
- 确保你使用的
swagger工具版本为v0.30及以上(该版本开始支持多模块扫描) - 在工作区根目录执行以下命令,指定所有服务模块的路径:
swagger generate spec -o swagger.yml --scan-models --module ./Subfolder/workspace1 --module ./Subfolder/workspace2 --module ./Subfolder/workspace3
- 命令会逐个扫描指定模块,自动聚合所有Swagger注解生成统一文件
关键注意事项
- 绝对不要导入各服务的main包,否则会触发
func main()重复声明错误,必须导入包含API注解的业务子包 - 提前确保不同服务的API路径、操作ID没有冲突,否则生成的统一规范会出现内容覆盖,建议给各服务API添加专属前缀(如
/workspace1/xxx)
内容的提问来源于stack exchange,提问作者ma_jafari
相关产品推荐
相关产品推荐

