go module
Go
語言默認的依賴管理工具
使用module
設置GOMODULE
設置GoModule
-
GOMODULE=off
禁用go module
,編譯時會從GOPATH
和vendor
文件夾中查找包; -
GOMODULE=on
啟用 go module,編譯時會忽略GOPATH
和vendor
文件夾,只根據go.mod
下載依賴; -
GOMODULE=auto
(默認值),當項目在 GOPATH/src 目錄之外,並且項目根目錄有go.mod
文件時,開啟go module
。
Windows
下設置:
set GO111MODULE = on 或者 set GO111MODULE = auto
MacOS
或者Linux
下設置:
export GO111MODULE = on 或者 export GO111MODULE = auto
go mod
命令
命令 | 作用 |
---|---|
go mod download | 下載依賴包到本地(默認為 GOPATH/pkg/mod 目錄) |
go mod edit | 編輯 go.mod 文件 |
go mod graph | 打印模塊依賴圖 |
go mod init | 初始化當前文件夾,創建 go.mod 文件 |
go mod tidy | 增加缺少的包,刪除無用的包 |
go mod vendor | 將依賴復制到 vendor 目錄下 |
go mod verify | 校驗依賴 |
go mod why | 解釋為什么需要依賴 |
GOPROXY
proxy
代理服務器。國內有防火牆存在,所以有些第三方包無法通過go get
獲取。所以需要設置GOPROXY
通過中間代理商獲取到相應的資源。
目前公開的代理服務器:
-
goproxy.io
; -
goproxy.cn
:(推薦)由國內的七牛雲提供。
windows
下設置:
go env -w GOPROXY=https://goproxy.cn,direct // 域名
MacOs
或者Linux
下設置:
export GOPROXY=https://goproxy.cn
使用go get下載指定版本的依賴包
執行go get
命令,在下載依賴包的同時還可以指定依賴包的版本。
-
運行
go get -u
命令會將項目中的包升級到最新的次要版本或者修訂版本; -
運行
go get -u=patch
命令會將項目中的包升級到最新的修訂版本; -
運行
go get [包名]@[版本號]
命令會下載對應包的指定版本或者將對應包升級到指定的版本。
go get [包名]@[版本號]命令中版本號可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,還可以是 git 提交時的哈希值,例如 go get foo@e3702bed2。
在項目中使用
使用Goland
新建項目會初始化一個go.mod
文件。go.mod
文件一旦創建后,它的內容將會被go toolchain
全面掌控,go toolchain
會在各類命令執行時,比如go get
、go build
、go mod
等修改和維護go.mod
文件。
go.mod
提供了module
、require
、replace
和exclude
四個命令:
-
module
語句指定包的名字(路徑); -
require
語句指定的依賴項模塊; -
replace
語句可以替換依賴項模塊; -
exclude
語句可以忽略依賴項模塊。
升級依賴:
使用命令go list -m -u all
來檢查可以升級的 package,使用go get -u need-upgrade-package
升級后會將新的依賴版本更新到 go.mod *
也可以使用go get -u
升級所有依賴
使用replace替換無法直接獲取的package
modules
可以通過在go.mod
文件中使用replace
指令替換成github
上對應的庫
replace (
golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)