起因是,遇到一個問題:

經查閱資料,很可能跟包管理有關,之前有了解過忘了就再學一遍順便解決問題,
學習資料:
- GO111MODULE 是個啥? - 知乎 (zhihu.com)
- go mod使用 - 簡書 (jianshu.com)
所謂包管理,比如軟體包管理,方便進行軟體安裝,升級,卸載等一些操作;
Go語言程式中經常會引入其他的package來使用;
Go語言剛開始是并沒有包管理相關功能,實作import <packages>時:
- 我理解是:早期需要啥包,就手動go get什么,
go get命令:會根據路徑,把相應的模塊獲取并保存在$GOPATH/src,
Go Modules
Go 1.11 引入Go Modules后:
GO111MODULE = off:強制使用GOPATH 方式;GO111MODULE = on:強制使用Go Modules;GO111MODULE = auto:- 當存在 go.mod 檔案時或處于 GOPATH 外, 相當于 GO111MODULE=on,
- 相當于 Go 1.13 下你可以將所有的代碼倉庫均不存盤在 GOPATH 下,
- 當專案目錄處于 $GOPATH 內,且沒有 go.mod 檔案存在時,相當于 GO111MODULE=off,
- 使用
Go Modules時,在go build期間使用的包存盤在$GOPATH/pkg/mod中(而不是GOPATH的$GOPATH/src中), - 執行
go run xxx.go運行代碼會發現go mod會自動查找依賴自動下載,
到這以后,會考慮到go.mod這個從哪里來,是自己手動創建么?接著學習go mod;
go mod命令
Go mod命令是實作Go Modules的工具;就相當于go get和GOPATH的關系;
go mod 命令引數:

圖片來源:go mod使用 - 簡書 (jianshu.com);常用的是
init,tidy,edit
初始化一個專案;
go mod init xxx
xxx與package名字無關;只是給當前專案用的模塊(modules)一個名字;
go.mod檔案一旦創建后,它的內容將會被go toolchain全面掌控,go toolchain會在各類命令執行時,比如go get、go build、go mod等修改和維護go.mod檔案,
同時還生成了
go.sum其中包含軟體包的哈希值,以確保我們具有正確的版本和檔案,
go.mod 提供了module, require、replace和exclude 四個go.mod內的關鍵字:
module陳述句指定包的名字(路徑)require陳述句指定的依賴項模塊replace陳述句可以替換依賴項模塊exclude陳述句可以忽略依賴項模塊
解決問題
1 確認GO111MODULE=on:確認了無數次,不僅zsh里配置了,bash里面也配置了;
但用go list是,依舊出現了如下報錯,配置的GO111MOUDLE=on未生效,

go env -w GO111MODULE=on
這樣之后就好了,
所以我就有一個疑問了,為什么bash組態檔中添加的GO111MODULE=on 沒生效?
作者:kp-hang 出處:https://www.cnblogs.com/kphang/p/15828097.html " target="_blank"> https://www.cnblogs.com/kphang/p/15828097.html 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接,否則保留追究法律責任的權利,macos,我只用zsh,zshrc中添加了,也source了;甚至bash_profile,profile也都添加了;為什么go env中還需要再設定一遍?很奇怪!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/417034.html
標籤:Go
