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"}
沒有留言:
張貼留言