GOLANG 環境幾個重要的env配置引數解析GOPATH/GOPROXY
GOPATH
表示go的工作目錄,這個目錄指定了需要從哪個地方尋找GO的包、可執行程式等,這個目錄可以是多個目錄表示,
go編譯或者執行時會從這個環境變數中去對應查詢,可能還不夠清晰,工作目錄或者如官方文件中說的workspace,
可以這麼理解為GO原始碼目錄,在這個目錄進行編譯、連結最後生成所需要的庫、可執行檔案
GOROOT
表示的是go語言編譯、工具、標準庫等的安裝路徑。
在Linux下設定GOROOT目錄:
export GOROOT=$HOME/go
GOPROXY,簡單來說就是一個代理,讓我們更方便的下載哪些由於牆的原因而導致無法下載的第三方包,
比如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時則不適用新特性
當為 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 "[email protected]:"] insteadOf = https://github.com/ [url "[email protected]:"] insteadOf = https://gitlab.com/
GONOPROXY 和 GONOSUMDB
GONOPROXY和GONOSUMDB均為none,意味著所有module,不管是公共的還是私有的,
都要經過proxy下載,經過sumdb驗證
GONOPROXY="《*.xxx,com》"
GONOSUMDB="《*.xxx,com》"
《*.xxx,com》網站不走代理拉取第三方包