Golang 1.11版本終于支援了官方的子產品依賴管理功能,1.11以前想要實作依賴管理隻能夠通過借助第三方庫來實作,1.11以前的版本Golang項目必須依賴以GOPATH,從目前版本開始Golang項目可以完全脫離GOPATH目錄而工作,GOPATH将會逐漸被移除;
Go Module
Go mod的使用也比較簡單,Golang新增了環境變量GO11MODULE用于控制對Module的支援;
GO111MODULE = off
關閉Module的支援,從GOPATH、vendor目錄查找包
GO111MODULE = auto
根據目前目錄情況啟用Module支援或禁用,隻當項目不在GOPATH/src目錄當中,并且目前目錄中存在go.mod檔案時啟用Module;
GO111MODULE = on
啟用Module支援;
指令介紹
go mod download:下載下傳子產品到本地緩存
go mod edit:編輯go.mod檔案
go mod graph:輸出列印目前項目的依賴圖
go mod init:建立新子產品到目前目錄
go mod vendor:将依賴拷貝到vendor目錄下
go mod tidy:整理子產品,移除為使用子產品,添加缺少子產品
go mod verify:驗證子產品正确性
go mod why:查找依賴
通過Golang Module建立子產品
1、初始化子產品
建立項目modtest目錄,進入modtest目錄:
執行 go mod init modtest初始化子產品,可以看到初始化完成後目前目錄下生成了一個go.mod檔案,由于時剛初始化子產品是以打開檔案可以看到檔案中隻有一行:
module modtest
2、在目前子產品中引用其他第三方子產品
建立test.go檔案
package main
import(
"fmt"
"github.com/go-redis/redis"
)
func main(){
fmt.Println("引用第三方子產品 ",redis.Client{})
}
執行go mod tidy 下載下傳依賴,執行go run、go build 同樣會下載下傳依賴;

執行完成後檢視go.mod即可看到相關依賴資訊,在GOPATH/pkg/mod目錄下可以看得到Golang module下來的所依賴的第三方包;
此時的go.mod已經配置了子產品所依賴的第三方包,go.mod内容如下:
3、在目前子產品引用包
在目前目錄下建立 submod包(目錄),進入submod目錄建立sub.go檔案
package submod
func Name(){
}
在項目根目錄,修改test.go目錄引用submod包
package main
import(
"fmt"
"github.com/go-redis/redis"
"modtest/submod"
)
func main(){
fmt.Println("測試 ",redis.Client{})
fmt.Println("包引用 ",submod.Name)
}
4、使用module代理
由于某些原因,某些包不FQ時不可以直接下得下來的,還好go mod提供了代理的設定,并且還提供了https://goproxy.io 代理服務,我們可以通過設定代理,下載下傳golang.org/x/text等無法直接下載下傳的第三方包;
set GOPROXY = https://goproxy.io