go-licenses 是 Google 维护的 Go 专用许可证审计工具,能准确识别 go.mod 中所有依赖(含间接依赖)的许可证,支持 CSV/JSON/归档输出,需集成到 CI 中阻断违规许可证并定期更新许可证归档。

go-licenses 是当前最实用的 Go 许可证审计工具
它由 Google 维护,专为 Go modules 设计,能准确识别 go.mod 中声明的所有依赖(包括间接依赖)及其许可证类型,比单纯解析 go.sum 或遍历 pkg/mod 更可靠。
常见误区是用 license-checker 扫 Node.js 项目那套逻辑去扫 Go 项目——它不理解 Go 的模块图结构,会漏掉 // indirect 依赖或误判本地 replace 路径的许可证。
- 必须通过
go-licenses的save或csv子命令执行扫描,不能只靠go list -m all输出人工判断 - 支持输出格式包括目录归档(含原始 LICENSE 文件)、CSV 表格、JSON 清单,推荐先用
csv快速过筛:go-licenses csv ./ - 若项目含私有模块或
replace到本地路径,需确保这些路径下存在可读的LICENSE或LICENSE.md,否则该依赖会被标记为UNKNOWN
go-licenses save 生成的许可证目录必须纳入构建产物
合规不是“扫完就完”,而是要让最终分发的二进制或镜像中包含可验证的许可证材料。直接运行 go-licenses save . --save_path=third_party_licenses 生成的目录,就是法律意义上需要随软件一并分发的内容。
容易被忽略的是:这个目录里的文件名和结构由 go-licenses 自动推断,不完全等同于源仓库根目录下的 LICENSE 文件。例如,某些包只在 /docs/LICENSE 放许可证,go-licenses 可能无法定位,需手动补全。
立即学习“go语言免费学习笔记(深入)”;
- 生成后务必检查
third_party_licenses下是否每个依赖都有对应子目录,且子目录内至少有一个文本文件(如LICENSE、COPYING) - Docker 构建时应显式
COPY third_party_licenses/ /LICENSES/,而不是靠ADD . /app顺带包含——后者可能遗漏或路径错位 - CI 流水线中建议加校验步骤:
find third_party_licenses -type f | wc -l对比历史值,突降说明有依赖许可证未被捕获
GPL 类许可证在 Go 项目中触发风险的典型场景
Go 本身是 MIT 许可,但一旦引入 GPL 库(尤其是 GPLv2/GPLv3),整个可执行文件在分发时可能被要求开源——这不是技术限制,而是法律义务。最容易踩坑的是间接依赖链。
例如,你只用了 MIT 的 github.com/spf13/cobra,但它依赖的 golang.org/x/sys 是 BSD,看似安全;但如果某次升级后,cobra 换了个 fork 版本,该 fork 引入了 github.com/evilcorp/gpl-logger(GPLv3),而你没跑 go-licenses csv 就合入,风险就埋下了。
- 用
go-licenses csv . | grep -i "gpl"快速筛查,注意大小写和变体(如GNU GPL、GPL-3.0) - 对
UNKNOWN条目必须人工确认:进入对应模块的go list -m -json <module>查Dir字段,cd 进去翻原始 LICENSE 文件 - Go 生态里极少有纯 GPL 的主流库,但某些嵌入式或硬件驱动相关模块(如
github.com/knqyf263/pet的旧版本)曾混入 GPL 代码,需盯紧更新日志
CI 中集成许可证检查必须阻断而非仅告警
把 go-licenses 当作 lint 工具只输出报告,等于没做合规。真正的审计必须能在发现禁止许可证(如 AGPL、SSPL)或 UNKNOWN 时中断 PR 构建。
关键不在“有没有工具”,而在“有没有策略”。比如某团队允许 MIT 和 Apache-2.0,但禁止 GPL,那么 CI 脚本里就得写死校验逻辑:
- 生成 CSV 后用
awk -F, '$3 ~ /GPL|AGPL|SSPL/ {print $1,$3; exit 1}' licenses.csv做匹配 - 对
UNKNOWN条目强制要求 PR 描述中附上人工确认截图或链接,否则不通过 - 不要依赖
go-licenses的自动分类结果作为唯一依据——它基于文件名和关键词匹配,不是法律意见
最常被跳过的环节是:没人定期重跑 go-licenses save 并 diff 新增的许可证文件。依赖每天都在变,合规检查也得是活的。


















