Go mod常用與高級操作

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基本操作

  1. 初始化一個moudle,模塊名爲你項目名
    go mod init 模塊名

  2. 下載modules到本地cache

    目前所有模塊版本數據均緩存在 $GOPATH/pkg/mod和 ​ $GOPATH/pkg/sum 下

    go mod download

  3. 編輯go.mod文件 選項有-json、-require和-exclude,可以使用幫助go help mod edit
    go mod edit

  4. 以文本模式打印模塊需求圖
    go mod graph

  5. 刪除錯誤或者不使用的modules
    go mod tidy

  6. 生成vendor目錄
    go mod vendor

  7. 驗證依賴是否正確
    go mod verify

  8. 查找依賴
    go mod why

4. mod高級操作

  1. 更新到最新版本
    go get github.com/gogf/gf@version

    如果沒有指明 version 的情況下,則默認先下載打了 tag 的 release 版本,比如 v0.4.5 或者 v1.2.3;如果沒有 release 版本,則下載最新的 pre release 版本,比如 v0.0.1-pre1。如果還沒有則下載最新的 commit

  2. 更新到某個分支最新的代碼
    go get github.com/gogf/gf@master
  3. 更新到最新的修訂版(只改bug的版本)
    go get -u=patch github.com/gogf/gf
  4. 替代只能翻牆下載的庫
    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
    
  5. 清理moudle 緩存
    go clean -modcache
  6. 查看可下載版本
    go list -m -versions github.com/gogf/gf

5. go mod自動下載私有倉庫gitlab中的包

  1. 設置系統環境變量:export GOPROXY=https://proxy.cn,direct

  2. 假如我在私有倉庫http://gitlab.mylab.com上有個hello/hi包,地址當然就是http://gitlab.mylab.com/hello/h

  3. windows系統, 直接編譯,會報https 443端口連接錯誤,拉不到gitlab項目,當然了,因爲gitlab 是http 80端口。
    在項目所在目錄執行如下命令也是一樣報錯。
    go mod download hello/hi
    然後執行了一句命令:
    go get -insecure hello/hi
    這樣拉下來一次(如果配置了GOPATH環境變量,拉下來的包在GOPATH/pkg/mod{GOPATH}/pkg/mod裏,否則是在{USER}/go/pkg/mod裏)之後,神奇的事情發生了,直接編譯可以成功拉到gitlab上的包了。
    並且執行如下命令也可以成功拉取了:
    go mod download hello/hi
    尷尬的是,再執行go get -insecure hello/hi反而報錯:missing dot in first path element

  4. Linux系統:
    與windows設不設GOPRIVATE都一樣的情況略有差異,linux上必需要先設置環境變量GOPRIVATE="我的gitlab地址",告訴go這是一個私有倉庫,不要用代理去拉,而是直接拉。剩下的與windows一樣,還是要先執行一次go get -insecure hello/hi纔行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章