GOLANG 環境幾個重要的env配置參數解析GOPATH/GOPROXY

 

GOPATHgit

表示go的工做目錄,這個目錄指定了須要從哪一個地方尋找GO的包、可執行程序等,這個目錄能夠是多個目錄表示,github

go編譯或者運行時會從這個環境變量中去對應查找,可能還不夠清晰,工做目錄或者如官方文檔中說的workspacegolang

能夠這麼理解爲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 會忽略 $GOPATHvendor文件夾,只根據go.mod下載依賴。

當爲 off時則不適用新特性 Go Modules支持,它會查找 vendor目錄和 $GOPATH來查找依賴關係,也就是繼續使用「GOPATH模式」。

當爲 auto時或未設置時則根據當前項目目錄下是否存在 go.mod文件或 $GOPATH/src以外而且其自己包含go.mod文件時纔會使用新特性 Go Modules模式,

而且autoGO111MODULE的默認值。

 

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這種形式或者直接使用commitchecksum,也能夠是master或者latest

versionmaster時,無論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

GONOPROXYGONOSUMDB均爲none,意味着全部module,無論是公共的仍是私有的,

都要通過proxy下載,通過sumdb驗證

GONOPROXY="*.xxx,com"

GONOSUMDB="*.xxx,com"

*.xxx,com》網站不走代理拉取第三方包

相關文章
相關標籤/搜索