Golang 入門 : 配置代理

由於一些客觀原因的存在,我們開發 Golang 項目的過程總會碰到無法下載某些依賴包的問題。這不是一個小問題,因爲你的工作會被打斷,即便你使用各種神通解決了問題,很可能這時你的線程已經切換到其他的事情上了(痛恨思路被打斷!)。所以最好是一開始我們就重視這個問題,並一勞永逸的解決它。

問題描述

當我們使用 go get、go install、go mod 等命令時,類似於 golang.org/x/... 的包會是無法下載的。比如通過下面的命令下載 sys 包:

$ go get -u golang.org/x/sys

下載肯定會失敗:
Golang 入門 : 配置代理

設置代理

如果你有自己的代理服務器,那就很容易了,這也是一勞永逸的方法。直接設置環境變量 http_proxy 和 https_proxy 就行了:

export http_proxy=http://proxyAddress:port
export https_proxy=http://proxyAddress:port

比如筆者在局域網中共享了代理 192.168.21.1:1080:

$ export http_proxy=http://192.168.21.1:1080
$ export https_proxy=http://192.168.21.1:1080

然後執行下面的命令後就能夠下載了:

$ go get -u golang.org/x/sys

手動下載並安裝包

如果一時找不到合適的代理,還可以臨時通過手動的方式下載包。我們常見的 golang.org/x/... 包,一般在 GitHub 上都有官方的鏡像倉庫對應。比如 zieckey/golang.org 就是作爲 golang.org/x 的鏡像庫存在的。我們可以手動下載或 clone 對應的 GitHub 倉庫到指定的目錄下,比如從 zieckey/golang.org 下載 x 目錄下的所有包。或者是每次只下載單個的庫,下面的示例演示如何下載 text 庫:

$ mkdir $GOPATH/src/golang.org/x
$ cd $GOPATH/src/golang.org/x
$ git clone [email protected]:golang/text.git

當如果需要指定版本的時候,該方法就無解了,因爲 GitHub 上的鏡像倉庫多數都沒有 tag。

使用 go mod replace

從 Go 1.11 版本開始,新增支持了 go modules 用於解決包依賴管理問題。該工具提供了 replace,就是爲了解決包的別名問題,也能替我們解決 golang.org/x 無法下載的的問題。

go module 被集成到原生的 go mod 命令中,但是如果你的代碼庫在 $GOPATH 中,module 功能是默認不會開啓的,想要開啓也非常簡單,通過一個環境變量即可開啓 export GO111MODULE=on。比如下面的示例,在go.mod中指定下面的代碼:

module example.com/demo

require (
    golang.org/x/text v0.3.0
)

replace (
    golang.org/x/text => github.com/golang/text v0.3.0
)

|## 使用 GOPROXY 環境變量
從 Go 1.11 版本開始,官方支持了 go module 包依賴管理工具。其實還新增了 GOPROXY 環境變量。如果設置了該變量,下載源代碼時將會通過這個環境變量設置的代理地址,而不再是以前的直接從代碼庫下載。比如我們可以指定自己的代理地址。

更可喜的是,goproxy.io 這個開源項目幫我們實現好了我們想要的。該項目允許開發者一鍵構建自己的 GOPROXY 代理服務。同時,也提供了公用的代理服務 https://goproxy.io,我們只需設置該環境變量即可正常下載被牆的源碼包了

export GO111MODULE=on
export GOPROXY=https://goproxy.io

也可以通過置空這個環境變量來關閉,export GOPROXY=。

對於 Windows 用戶,可以在 PowerShell 中設置:

$env:GOPROXY = "https://goproxy.io"

最後,我們當然推薦使用 GOPROXY 這個環境變量的解決方式,前提是 Go version >= 1.11。

下載 golang.org/x/sys 包:

$ go get -u golang.org/x/sys

Golang 入門 : 配置代理
下載到的包在 $GPATH/pkg/mod/golang.org/x/
Golang 入門 : 配置代理

作者:sparkdev
出處:http://www.cnblogs.com/sparkdev/

51Reboot Python 運維開發18天訓練營1299特價倒計時3天

網絡班|面授班同步,有想要諮詢的WeChat:17812796384

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章