一鍵解決 go get golang.org/x 包失敗
問題描述
當我們使用 go get
、go install
、go mod
等命令時,會自動下載相應的包或依賴包。但由於眾所周知的原因,類似於 golang.org/x/...
的包會出現下載失敗的情況。如下所示:
$ go get -u golang.org/x/sys
go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
解決方式
那我們該如何解決問題呢?畢竟還要製造 bug 的嘛~
手動下載
我們常見的 golang.org/x/...
包,一般在 GitHub 上都有官方的映象倉庫對應。比如 golang.org/x/text
對應 github.com/golang/text
。所以,我們可以手動下載或 clone 對應的 GitHub 倉庫到指定的目錄下。
mkdir $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone git@github.com:golang/text.git
rm -rf text/.git
當如果需要指定版本的時候,該方法就無解了,因為 GitHub 上的映象倉庫多數都沒有 tag。並且,手動嘛,程式設計師怎麼能幹呢,尤其是依賴的依賴,太多了。
設定代理
如果你有代理,那麼可以設定對應的環境變數:
export http_proxy=http://proxyAddress:port
export https_proxy=http://proxyAddress:port
或者,直接用 all_proxy:
export all_proxy=http://proxyAddress:port
go mod replace
從 Go 1.11 版本開始,新增支援了 go modules
用於解決包依賴管理問題。該工具提供了 replace,就是為了解決包的別名問題,也能替我們解決 golang.org/x
無法下載的的問題。
go module
被整合到原生的 go mod 命令中,但是如果你的程式碼庫在 $GOPATH
中,module 功能是預設不會開啟的,想要開啟也非常簡單,通過一個環境變數即可開啟 export GO111MODULE=on
。
以下為參考示例:
module example.com/hello
require (
golang.org/x/text v0.3.0
)
replace (
golang.org/x/text => github.com/golang/text v0.3.0
)
類似的還有 glide、gopm 等這類第三方包管理工具,都不同方式的解決方案提供給我們。
GOPROXY 環境變數
終於到了本文的終極大殺器 —— GOPROXY
。
我們知道從 Go 1.11
版本開始,官方支援了 go module
包依賴管理工具。
其實還新增了 GOPROXY
環境變數。如果設定了該變數,下載原始碼時將會通過這個環境變數設定的代理地址,而不再是以前的直接從程式碼庫下載。這無疑對我等無法科學上網的開發良民來說是最大的福音。
更可喜的是,goproxy.io
這個開源專案幫我們實現好了我們想要的。該專案允許開發者一鍵構建自己的 GOPROXY
代理服務。同時,也提供了公用的代理服務 https://goproxy.io
,我們只需設定該環境變數即可正常下載被牆的原始碼包了:
export GOPROXY=https://goproxy.io
不過,需要依賴於 go module
功能。可通過 export GO111MODULE=on
開啟 MODULE。
如果專案不在 GOPATH
中,則無法使用 go get ...
,但可以使用 go mod ...
相關命令。
也可以通過置空這個環境變數來關閉,export GOPROXY=
。
對於 Windows 使用者,可以在 PowerShell 中設定:
$env:GOPROXY = "https://goproxy.io"
最後,我們當然推薦使用 GOPROXY 這個環境變數的解決方式,前提是 Go version >= 1.11。
最後的最後,七牛也出了個國內代理 goproxy.cn 方便國內使用者更快的訪問不能訪問的包,真是良心。
參考資料
- goproxy.io for Go modules
- goproxy.io
文章作者 Jioby
上次更新 2019-09-17
許可協議 CC BY-NC-ND 4.0
原文連結 https://shockerli.net/post/go-get-golang-org-x-solution/
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Go 解決國內下載 go get golang.org/x 包失敗 非原創Golang
- go get下載包失敗的解決方案Go
- Go 的 golang.org/x/ 系列包和標準庫包有什麼區別?Golang
- Go 解決國內go get安裝包超時問題Go
- idea漢化包安裝失敗解決方法Idea
- linux/mac下一鍵刪除下載失敗的maven jar包LinuxMacMavenJAR
- ionic3打包失敗的解決辦法
- pycharm 安裝包總失敗原因及解決辦法PyCharm
- 關於 unrecognized import path "golang.org/x/sys" 的另一個解決辦法ZedImportGolang
- 解決 goland 載入 golang.org 包的網路問題GoLandGolang
- 解決 go get 超時問題Go
- Win10系統安裝失敗?用這種方法一鍵就解決了Win10
- pyhanlp下載失敗解決方法HanLP
- git clone失敗問題解決Git
- npm安裝失敗解決方案NPM
- 解決Autowired注入失敗為nullNull
- VScode 更新失敗解決辦法VSCode
- dbsnmp啟動失敗解決方法
- npm install 失敗解決辦法NPM
- 解決linux rz傳輸失敗Linux
- anaconda安裝失敗解決方法
- 解決IDEA建立maven工程失敗的一種方法IdeaMaven
- golang go get速度慢解決方法Golang
- python tarfile解壓失敗怎麼解決Python
- 鍵盤失靈了要怎麼解決 電腦鍵盤失靈一鍵修復
- go get 安裝gitlab私有包GoGitlab
- 【Python】pydot安裝失敗解決方法Python
- mongodb啟動失敗問題解決MongoDB
- NPM run dev 失敗解決辦法NPMdev
- npm install安裝失敗解決方法NPM
- mysql(mariadb)啟動失敗解決方法MySql
- Token驗證失敗的解決方法
- 解決Wireshark安裝Npcap元件失敗PCA元件
- anaconda prompt開啟失敗解決方法
- python用install失敗怎麼解決Python
- redis lRem 刪除失敗?(已解決)RedisREM
- hbase啟動失敗問題解決
- pip安裝selenium一直失敗解決辦法