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。