首頁 > 後端開發 > Golang > 快速解決go get golang.org/x 套件不成功的問題

快速解決go get golang.org/x 套件不成功的問題

藏色散人
發布: 2021-12-02 14:42:45
轉載
3113 人瀏覽過

本文由go語言教學專欄為大家介紹如何一鍵解決 go get golang.org/x 套件失敗問題,希望對需要的朋友有幫助!

一鍵解決go get golang.org/x 套件失敗

問題描述

當我們使用go get go installgo 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 方便國內用戶更快的訪問不能訪問的包,真是良心。

以上是快速解決go get golang.org/x 套件不成功的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板