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。