GOPATHgit
表示go的工做目錄,這個目錄指定了須要從哪一個地方尋找GO的包、可執行程序等,這個目錄能夠是多個目錄表示,github
go編譯或者運行時會從這個環境變量中去對應查找,可能還不夠清晰,工做目錄或者如官方文檔中說的workspace,golang
能夠這麼理解爲GO源碼目錄,在這個目錄進行編譯、連接最後生成所須要的庫、可執行文件ssh
GOROOT工具
表示的是go語言編譯、工具、標準庫等的安裝路徑。gitlab
在Linux下設置GOROOT目錄:網站
export GOROOT=$HOME/go
GOPROXY,簡單來講就是一個代理,讓咱們更方便的下載哪些因爲牆的緣由而致使沒法下載的第三方包,url
好比golang.org/x/下的包,雖然也有各類方法解決,可是,若是是你在拉取第三方包的時候,而這個包又依賴於golang.org/x/下的包,spa
你本地又偏偏沒有,固然不嫌麻煩的話,也能夠先拉取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》網站不走代理拉取第三方包