1. 開啓Go module
1.11和1.12版本
將下面兩個設置添加到系統的環境變量中
GO111MODULE=on
GOPROXY=https://goproxy.io
1.13版本之後
這種方式並不會覆蓋之前的配置,需要先把系統的環境變量裏面的給刪掉再設置
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
2. go get使用
使用go module之後,go get 拉取依賴的方式就發生了變化
- 下載項目依賴
go get ./...
- 拉取最新的版本(優先擇取 tag)
go get golang.org/x/text@latest
- 拉取 master 分支的最新 commit
go get golang.org/x/text@master
- 拉取 tag 爲 v0.3.2 的 commit
go get golang.org/x/[email protected]
- 拉取 hash 爲 342b231 的 commit,最終會被轉換爲 v0.3.2:
go get golang.org/x/text@342b2e
- 指定版本拉取,拉取v3版本
go get github.com/smartwalle/alipay/v3
- 更新
go get -u
3. mod基本操作
-
初始化一個moudle,模塊名爲你項目名
go mod init 模塊名
-
下載modules到本地cache
目前所有模塊版本數據均緩存在 $GOPATH/pkg/mod和 $GOPATH/pkg/sum 下
go mod download
-
編輯go.mod文件 選項有-json、-require和-exclude,可以使用幫助go help mod edit
go mod edit
-
以文本模式打印模塊需求圖
go mod graph
-
刪除錯誤或者不使用的modules
go mod tidy
-
生成vendor目錄
go mod vendor
-
驗證依賴是否正確
go mod verify
-
查找依賴
go mod why
4. mod高級操作
- 更新到最新版本
go get github.com/gogf/gf@version
如果沒有指明 version 的情況下,則默認先下載打了 tag 的 release 版本,比如 v0.4.5 或者 v1.2.3;如果沒有 release 版本,則下載最新的 pre release 版本,比如 v0.0.1-pre1。如果還沒有則下載最新的 commit
- 更新到某個分支最新的代碼
go get github.com/gogf/gf@master
- 更新到最新的修訂版(只改bug的版本)
go get -u=patch github.com/gogf/gf
- 替代只能翻牆下載的庫
go mod edit -replace=golang.org/x/[email protected]=github.com/golang/crypto@latest go mod edit -replace=golang.org/x/[email protected]=github.com/golang/sys@latest
- 清理moudle 緩存
go clean -modcache
- 查看可下載版本
go list -m -versions github.com/gogf/gf
5. go mod自動下載私有倉庫gitlab中的包
-
設置系統環境變量:
export GOPROXY=https://proxy.cn,direct
-
假如我在私有倉庫http://gitlab.mylab.com上有個hello/hi包,地址當然就是http://gitlab.mylab.com/hello/h
-
windows系統, 直接編譯,會報https 443端口連接錯誤,拉不到gitlab項目,當然了,因爲gitlab 是http 80端口。
在項目所在目錄執行如下命令也是一樣報錯。
go mod download hello/hi
然後執行了一句命令:
go get -insecure hello/hi
這樣拉下來一次(如果配置了GOPATH環境變量,拉下來的包在{USER}/go/pkg/mod裏)之後,神奇的事情發生了,直接編譯可以成功拉到gitlab上的包了。
並且執行如下命令也可以成功拉取了:
go mod download hello/hi
尷尬的是,再執行go get -insecure hello/hi
反而報錯:missing dot in first path element
。 -
Linux系統:
與windows設不設GOPRIVATE都一樣的情況略有差異,linux上必需要先設置環境變量GOPRIVATE="我的gitlab地址"
,告訴go這是一個私有倉庫,不要用代理去拉,而是直接拉。剩下的與windows一樣,還是要先執行一次go get -insecure hello/hi纔行。