先运行go mod tidy清理未引用模块,结合go list -deps比对实际依赖,手动删除冗余;替换重型库如cobra、gin为flag、net/http等轻量替代;用go get@版本锁定最小依赖,检查indirect标记并移除无用项;通过//go:build标签分离调试代码,拆分工具函数到独立模块,使用静态分析工具定位零调用包。

精简go.mod依赖树
很多项目在长期迭代中积累了大量间接依赖,有些早已不用却仍留在go.mod里。执行go mod tidy会自动清理未引用的模块,但要注意它只处理直接import语句——如果代码里用到了_ "some/pkg"或反射加载包,这些依赖不会被自动移除。建议先运行go list -deps -f '{{if not .Standard}}{{.ImportPath}}{{end}}' ./... | sort -u查看实际用到的非标准库路径,再比对go.mod,手动删掉明显冗余项。
替换重型依赖为轻量替代品
某些常用库体积大、功能过剩。比如用github.com/spf13/cobra做命令行时,若仅需简单参数解析,可换成flag标准库;用github.com/gin-gonic/gin做HTTP服务,若无中间件链和路由分组需求,直接用net/http更干净;JSON处理若不涉及复杂嵌套或自定义Marshaler,encoding/json足够。替换前用go list -f '{{.Size}} {{.ImportPath}}' your/module查各依赖编译后大小,优先动“大户”。
启用Go Modules的最小版本选择
默认go get可能拉取最新版(含更多功能和依赖),改用go get example.com/pkg@v1.2.0锁定已验证的最小可用版本。更进一步,在go.mod中添加// indirect标记的模块,检查是否真被间接引用:运行go mod graph | grep 'your-unwanted-pkg',若无输出,说明它没被任何路径真正需要,可安全go mod edit -droprequire。
构建时排除未使用代码
Go 1.18+支持//go:build条件编译,对调试、测试专用代码加构建标签,如//go:build debug,发布时用go build -tags=prod跳过。另外,避免在main包外放大量工具函数——它们会被整个模块引入。把辅助逻辑拆到独立小模块,按需引入。静态分析工具go tool trace或第三方goda也能帮你定位哪些包虽被import但零调用。
立即学习“go语言免费学习笔记(深入)”;
基本上就这些。不复杂但容易忽略。










