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/下的包,

你本地又恰恰沒有,當然不嫌麻煩的話,也可以先拉取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》網站不走代理拉取第三方包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM