GOPATH
表示go的工作目錄,這個目錄指定了需要從哪個地方尋找GO的包、可執行程序等,這個目錄可以是多個目錄表示,
go編譯或者運行時會從這個環境變量中去對應查找,可能還不夠清晰,工作目錄或者如官方文檔中說的workspace,
可以這么理解為GO源碼目錄,在這個目錄進行編譯、鏈接最后生成所需要的庫、可執行文件
GOROOT
表示的是go語言編譯、工具、標准庫等的安裝路徑。
在Linux下設置GOROOT目錄:
export GOROOT=$HOME/go
GOPROXY,簡單來說就是一個代理,讓我們更方便的下載哪些由於牆的原因而導致無法下載的第三方包,
比如golang.org/x/下的包,雖然也有各種方法解決,但是,如果是你在拉取第三方包的時候,而這個包又依賴於golang.org/x/下的包,
你本地又恰恰沒有,當然不嫌麻煩的話,也可以先拉取golang.org/x/下的包,再拉取第三方包。
官網是這么說的 A Global Proxy for Go Modules go包的全球代理。
proxy.golang.org 在中國無法訪問,故而建議使用 goproxy.cn 作為替代。
我個人配置
其實值列表中的 “direct” 為特殊指示符,
用於指示 Go 回源到模塊版本的源地址去抓取 (比如 GitHub 等),當值列表中上一個 Go module proxy 返回 404 或 410 錯誤時,Go 自動嘗試列表中的下一個,
遇見 “direct” 時回源,遇見 EOF 時終止並拋出類似 “invalid version: unknown revision...” 的錯誤。
GO111MODULE
export GO111MODULE=on # 開啟GoModule特性
或者在環境信息文件/etc/profile的最后面添加上一行
export GO111MODULE=on
GO111MODULE解釋, 當為on時則使用Go Modules,go 會忽略 $GOPATH和 vendor文件夾,只根據go.mod下載依賴。
當為 off時則不適用新特性 Go Modules支持,它會查找 vendor目錄和 $GOPATH來查找依賴關系,也就是繼續使用“GOPATH模式”。
當為 auto時或未設置時則根據當前項目目錄下是否存在 go.mod文件或 $GOPATH/src之外並且其本身包含go.mod文件時才會使用新特性 Go Modules模式,
並且auto為 GO111MODULE的默認值。
go modules
golang官方建議是一個項目一個GOPATH,但是鑒於很多人都不這么做(我也不這么做,因為麻煩),
於是在go1.11的時候推出了這個go modules來解決依賴管理的問題。
使用:
生成 go.mod 文件
go mod init
加載 pakage 到 GOPATH\pkg\mod 下
go mod tidy
配合go get使用(版本篩選):
go get 自動下載package包到 GOPATH\pkg\mod 目錄下,並更新go.mod文件
go get package[@version]來安裝指定版本的package,默認go get package@latest
version可以是vx.y.z這種形式或者直接使用commit的checksum,也可以是master或者latest
當version是master時,不管package有沒有打tag,都會選擇master分支的最新commit
可以在version前使用>,>=,<,<=,表示選取的版本不得超過/低於version,在這個范圍內的符合latest條件的版本
當想要修改package的版本時,只需要go get package@指定的version即可
GOPRIVATE
go get通過代理服務拉取私有倉庫(企業內部module或托管站點上的private庫),而代理服務不可能訪問到私有倉庫,會出現了404錯誤
go1.13版本提供了一個方便的解決方案:GOPRIVATE環境變量。
export GOPRIVATE=gitlab.com/xxx
私有庫訪問可以通過命令git config ...的方式來配置
已經配置了ssh key,將https訪問轉換為 ssh 訪問:
[url "git@github.com:"] insteadOf = https://github.com/ [url "git@gitlab.com:"] insteadOf = https://gitlab.com/
GONOPROXY 和 GONOSUMDB
GONOPROXY和GONOSUMDB均為none,意味着所有module,不管是公共的還是私有的,
都要經過proxy下載,經過sumdb驗證
GONOPROXY="《*.xxx,com》"
GONOSUMDB="《*.xxx,com》"
《*.xxx,com》網站不走代理拉取第三方包