Go的環境變數GOPROXY的作用如下。
GOPROXY用來設定module proxy server的URL位址。
module proxy就像是Java的Maven repository,Python的PyPI,JavaScript的npm registry。
執行Go module命令(例如go get、go mod tidy)時會從GOPROXY設定的module proxy server(預設為https://proxy.golang.org,direct)下載專案中依賴的module,並從GOSUMDB指定的校驗碼資料庫(checksum database)(預設為sum.golang.org)取得雜湊進行校驗。
例如下面GOPROXY設定的URL為Go預設的https://proxy.golang.org,direct。
GOPROXY=https://proxy.golang.org,direct
GOPROXY URL可接受http、https或file的scheme,若沒指定預設為https。例如下面效果同GOPROXY=https://proxy.golang.org。
GOPROXY=proxy.golang.org
GOPROXY可設定多個module proxy URLs,使用逗號,或直線符號|分隔。例如下面設定兩個module proxy server URLs分別為https://proxy.golang.org及https://goproxy.io。
GOPROXY=https://proxy.golang.org,https://goproxy.io
逗號,分隔則從第一個URL下載module出現404或410錯誤會改從下一個URL下載,至於其他錯誤則直接終止;直線符號|分隔則從第一個URL下載module出現任何錯誤都會改從下一個URL下載。
GOPROXY除了URL,另外可設定兩個關鍵字off或direct。
off:禁止從任何來源下載module。direct:直接從module的版本庫(例如GitHub、GitLab)下載,不從module proxy下載
例如下面禁止Go從任何來源下載module。
GOPROXY=off
下面設定Go先從ttps://proxy.golang.org module proxy下載module,若不存在則改從module的版本庫下載。
GOPROXY=https://proxy.golang.org,direct
Module proxy URL、module path及版號組成對該module的資源請求位址,格式為$base/$module/@v。以module proxy https://proxy.golang.org及uber go zap module為例:
- https://proxy.golang.org/go.uber.org/zap/@v/list:返回module的所有版本。
- https://proxy.golang.org/go.uber.org/zap/@v/v1.9.0.info:返回module的版本號碼及建立時間資訊,以JSON表示如下。
{"Version":"v1.9.0","Time":"2018-07-19T21:35:11Z"} - https://proxy.golang.org/go.uber.org/zap/@v/v1.9.0.mod:返回module的
go.mod檔,若不存在返回module path。module go.uber.org/zap - https://proxy.golang.org/go.uber.org/zap/@v/v1.9.0.zip:返回module的zip壓縮檔。
- https://proxy.golang.org/go.uber.org/zap/@latest:返回module最新的版本資訊,以JSON表示如下。
{"Version":"v1.19.1","Time":"2021-09-08T21:32:28Z"}
沒有留言:
張貼留言