go從 v1.11 以後就推出了新的包管理,go module,它和以前的$GOPATH不一樣,已經不在須要src,bin這樣的子目錄了,一個源代碼目錄甚至是空目錄均可以做爲module,只要其中包含有go.mod文件。 git
module 是一個相關Go包的集合,它是源代碼更替和版本控制的單元。模塊由源文件造成的go.mod文件的根目錄定義,包含 go.mod 文件的目錄也被稱爲模塊根。moudles取代舊的的基於GOPATH方法來指定在工程中使用哪些源文件或導入包。模塊路徑是導入包的路徑前綴, go.mod 文件定義模塊路徑,而且列出了在項目構建過程當中使用的特定版本。 github
go1.11.1 golang
go.mod
文件 定義 module
路徑以及列出其餘須要 在 build
時引入的模塊的特定的 版本 ,以下 。 緩存
module gomodule_demo go 1.14 require ( github.com/sirupsen/logrus v1.6.0 github.com/stretchr/testify v1.4.0 // indirect golang.org/x/sys v0.0.0-20200116001909-b77594299b42 // indirect gopkg.in/yaml.v2 v2.2.8 // indirect )
module:用於定義當前項目的模塊路徑。 ide
go:用於標識當前模塊的 Go 語言版本,值爲初始化模塊時的版本,目前來看還只是個標識做用。 ui
require:用於設置一個特定的模塊版本。 命令行
exclude:用於從使用中排除一個特定的模塊版本。 版本控制
replace:用於將一個模塊版本替換爲另一個模塊版本。 code
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= ........
Go 1.11中
的 module
支持臨時環境變量—— GO111MODULE
,它能夠設置如下三個值: off
, on
或者 auto
(默認)。 blog
GO111MODULE=off
,那麼 go
命令行將不會使用新的 module
功能,相反的,它將會在 vendor
目錄下和 GOPATH
目錄中查找依賴包。也把這種模式叫 GOPATH模式
。 GO111MODULE=on
,那麼 go
命令行就會使用 modules
功能,而不會訪問 GOPATH
。也把這種模式稱做 module-aware
模式,這種模式下, GOPATH
再也不在 build
時扮演導入的角色,可是儘管如此,它仍是承擔着存儲下載依賴包的角色。它會將依賴包放在 GOPATH/pkg/mod
目錄下。 GO111MODULE=auto
,這種模式是默認的模式,也就是說在你不設置的狀況下,就是 auto
。這種狀況下, go
命令行會根據當前目錄來決定是否啓用 module
功能。只有噹噹前目錄在 GOPATH/src
目錄以外並且當前目錄包含 go.mod
文件或者其子目錄包含 go.mod
文件纔會啓用。 go mod init
生成 go.mod 文件 (Go 1.13 中惟一一個能夠生成 go.mod 文件的子命令)
go mod tidy -v
整理現有的依賴,刪除未使用的依賴。
go mod vendor
導出現有的全部依賴 (事實上 Go modules 正在淡化 Vendor 的概念)
接下來使用go build -mod=vendor來構建項目, 由於在go modules模式下go build是屏蔽vendor機制的,因此須要特定參數從新開啓vendor機制:
go mod graph
查看現有的依賴結構
go mod download
下載 go.mod 文件中指明的全部依賴
go mod edit
編輯 go.mod 文件
go mod verify
校驗一個模塊是否被篡改過
go clean -modcache
清理全部已緩存的模塊版本數據。
go mod
查看全部 go mod的使用命令。
其版本格式爲 「主版本號.次版本號.修訂號」,版本號的遞增規則以下:
主版本號:當你作了不兼容的 API 修改。
次版本號:當你作了向下兼容的功能性新增。
go build -mod=vendor
go mod init
和 go mod tidy -v
兩個命令就夠用了。