由于一些客觀原因的存在,我們開發(fā) Golang 項(xiàng)目的過(guò)程總會(huì)碰到無(wú)法下載某些依賴包的問(wèn)題。這不是一個(gè)小問(wèn)題,因?yàn)槟愕墓ぷ鲿?huì)被打斷,即便你使用各種神通解決了問(wèn)題,很可能這時(shí)你的線程已經(jīng)切換到其他的事情上了(痛恨思路被打斷!)。所以最好是一開始我們就重視這個(gè)問(wèn)題,并一勞永逸的解決它。
問(wèn)題描述
當(dāng)我們使用 go get、go install、go mod 等命令時(shí),類似于 golang.org/x/... 的包會(huì)是無(wú)法下載的。比如通過(guò)下面的命令下載 sys 包:
$ go get -u golang.org/x/sys
下載肯定會(huì)失?。?/p>
設(shè)置代理
如果你有自己的代理服務(wù)器,那就很容易了,這也是一勞永逸的方法。直接設(shè)置環(huán)境變量 http_proxy 和 https_proxy 就行了:
export http_proxy=http://proxyAddress:port export https_proxy=http://proxyAddress:port
比如筆者在局域網(wǎng)中共享了代理 192.168.21.1:1080:
$ export http_proxy=http://192.168.21.1:1080 $ export https_proxy=http://192.168.21.1:1080
然后執(zhí)行下面的命令后就能夠下載了:
$ go get -u golang.org/x/sys
手動(dòng)下載并安裝包
如果一時(shí)找不到合適的代理,還可以臨時(shí)通過(guò)手動(dòng)的方式下載包。我們常見的 golang.org/x/... 包,一般在 GitHub 上都有官方的鏡像倉(cāng)庫(kù)對(duì)應(yīng)。比如zieckey/golang.org就是作為 golang.org/x 的鏡像庫(kù)存在的。我們可以手動(dòng)下載或 clone 對(duì)應(yīng)的 GitHub 倉(cāng)庫(kù)到指定的目錄下,比如從zieckey/golang.org下載 x 目錄下的所有包?;蛘呤敲看沃幌螺d單個(gè)的庫(kù),下面的示例演示如何下載 text 庫(kù):
$ mkdir $GOPATH/src/golang.org/x $ cd $GOPATH/src/golang.org/x $ git clone git@github.com:golang/text.git
當(dāng)如果需要指定版本的時(shí)候,該方法就無(wú)解了,因?yàn)?GitHub 上的鏡像倉(cāng)庫(kù)多數(shù)都沒(méi)有 tag。
使用 go mod replace
從 Go 1.11 版本開始,新增支持了 go modules 用于解決包依賴管理問(wèn)題。該工具提供了 replace,就是為了解決包的別名問(wèn)題,也能替我們解決 golang.org/x 無(wú)法下載的的問(wèn)題。
go module 被集成到原生的 go mod 命令中,但是如果你的代碼庫(kù)在 $GOPATH 中,module 功能是默認(rèn)不會(huì)開啟的,想要開啟也非常簡(jiǎn)單,通過(guò)一個(gè)環(huán)境變量即可開啟 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 環(huán)境變量
從 Go 1.11 版本開始,官方支持了 go module 包依賴管理工具。其實(shí)還新增了 GOPROXY 環(huán)境變量。如果設(shè)置了該變量,下載源代碼時(shí)將會(huì)通過(guò)這個(gè)環(huán)境變量設(shè)置的代理地址,而不再是以前的直接從代碼庫(kù)下載。比如我們可以指定自己的代理地址。
更可喜的是,goproxy.io 這個(gè)開源項(xiàng)目幫我們實(shí)現(xiàn)好了我們想要的。該項(xiàng)目允許開發(fā)者一鍵構(gòu)建自己的 GOPROXY 代理服務(wù)。同時(shí),也提供了公用的代理服務(wù)https://goproxy.io,我們只需設(shè)置該環(huán)境變量即可正常下載被墻的源碼包了:
export GO111MODULE=on export GOPROXY=https://goproxy.io
也可以通過(guò)置空這個(gè)環(huán)境變量來(lái)關(guān)閉,export GOPROXY=。
對(duì)于 Windows 用戶,可以在 PowerShell 中設(shè)置:
$env:GOPROXY = "https://goproxy.io"
最后,我們當(dāng)然推薦使用 GOPROXY 這個(gè)環(huán)境變量的解決方式,前提是 Go version >= 1.11。
下載 golang.org/x/sys 包:
$ go get -u golang.org/x/sys
下載到的包在 $GPATH/pkg/mod/golang.org/x/
鏈接:https://www.cnblogs.com/sparkdev/p/10649159.html
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9123瀏覽量
85322 -
命令
+關(guān)注
關(guān)注
5文章
683瀏覽量
22011 -
線程
+關(guān)注
關(guān)注
0文章
504瀏覽量
19675
原文標(biāo)題:Golang 配置代理方法
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論