go swagger慢
几个可能导致 swagger 生成很慢的原因:
主要原因分析
1.--parseDependency选项导致全依赖解析
当前swag init命令使用了--parseDependency参数:
bash
swag init --parseDependency --instanceName swagger -g .\main.go -d .\这个选项会递归解析所有依赖包的注释,包括:
- 项目内部依赖(如
beapi) - 外部第三方库(如
gin、gorm等) - 所有间接依赖(共 260+ 个包)
这会导致大量不必要的文件扫描,严重影响性能。
2.docs.go 文件过大
从读取的文件内容看,docs.go被截断(超过 40KB),说明项目包含大量 API 端点,解析和生成时间自然会很长。
3.解析范围过宽
当前-d .\参数表示解析当前目录下所有文件,但项目结构复杂:
plainText
beweb/ ├── webctl/ # 多个控制器 ├── setupweb/ # 配置 ├── docs/ # swagger 文档 └── ...4.swag 版本较旧
项目使用的是github.com/swaggo/swag v1.16.4,较新版本可能有性能优化。
优化方案
方案一:移除--parseDependency(推荐)
修改swagini.bat:
batch
rem 移除 --parseDependency 选项 swag init --instanceName swagger -g .\main.go -d .\效果:只解析当前项目的注释,跳过所有依赖包,性能提升显著。
方案二:限制解析目录
batch
swag init --instanceName swagger -g .\main.go -d .\webctl,.\setupweb效果:只解析必要的目录,减少扫描范围。
方案三:参考 beopc 项目的优化配置
beopc 项目已经做了优化:
batch
swag init --parseDependency -g .\main.go --exclude "webplat,webbiz,controller"方案四:升级 swag 版本
bash
go get github.com/swaggo/swag@latest建议的最终优化
修改E:\soft\gotrain\beweb\swagini.bat:
batch
@echo off rem 优化后的 swagger 生成命令 rem 1. 移除 --parseDependency 避免解析外部依赖 rem 2. 明确指定需要解析的目录 swag init --instanceName swagger -g .\main.go -d .\webctl,.\setupweb cd ..优化效果预估
| 优化项 | 预期效果 |
|---|---|
移除--parseDependency | 性能提升 80%+,避免解析数百个依赖包 |
| 限制解析目录 | 减少 30-50% 的扫描文件数 |
| 升级 swag | 额外 10-20% 性能提升 |
如果需要保留依赖解析功能(例如某些响应类型定义在依赖包中),可以使用--parseInternal替代--parseDependency,只解析内部包而不解析外部第三方库。
