Linux环境下Golang包管理:Go Modules(官方推荐)
Go Modules是Go语言官方推出的依赖管理工具,自Go 1.11引入,Go 1.16起成为默认方式,旨在解决第三方依赖版本控制、项目脱离GOPATH限制及多模块管理问题,是新项目的标准选择。
在项目根目录下执行以下命令,生成go.mod文件(记录模块路径、依赖版本及Go版本):
go mod init <module-name>
其中<module-name>通常为项目的导入路径(如github.com/username/projectname)。
import "github.com/gin-gonic/gin")并运行/构建项目时,Go会自动下载依赖并更新go.mod文件。go get命令显式添加依赖(会自动更新go.mod和go.sum):go get <package-path> # 添加最新版本(如go get github.com/gin-gonic/gin)
go get <package-path>@<version> # 指定版本(如go get github.com/gin-gonic/gin@v1.9.1)
-u标志更新go.mod中的所有依赖到最新次要/补丁版本:go get -u
go get -u <package-path> # 如go get -u github.com/gin-gonic/gin
运行go mod tidy命令,会自动扫描项目代码,移除go.mod中未使用的依赖,并下载缺失的依赖;同时生成/更新go.sum文件(记录依赖的校验和,确保完整性)。
go mod graph命令,显示模块间的依赖关系(如github.com/yourname/myapp -> github.com/gin-gonic/gin@v1.9.1)。go list -m all命令,列出go.mod中记录的所有依赖及其版本。vendor文件夹(确保项目在不同环境构建时使用一致依赖版本):go mod vendor
-mod=vendor标志,强制使用vendor目录中的依赖:go build -mod=vendor
replace指令临时修改依赖版本或使用本地模块(如修复第三方库bug或使用本地fork版本):replace <old-package-path> => <new-package-path> <version> # 如replace github.com/old/dependency => ../local-repo v1.2.3
replace <old-package-path> => <local-path> # 如replace github.com/old/dependency => ../my-local-repo
修改go.mod后,运行go mod tidy应用替换。GOPROXY环境变量使用镜像源(如七牛云goproxy.cn),加速依赖下载:export GOPROXY=https://goproxy.cn,direct
可添加到~/.bashrc或~/.zshrc中永久生效。$GOPATH/src目录下,通过go get下载依赖到$GOPATH/pkg/mod。目前已不推荐,建议迁移至Go Modules。dep init、dep ensure等命令,但建议尽快迁移到Go Modules。