問題の説明
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)
解決策
では、この問題をどのように解決すればよいでしょうか。結局のところ、まだバグを作成する必要があります~
マニュアル ダウンロード
共通の golang.org/x/...
パッケージは GitHub で一般公開されています。対応。たとえば、golang.org/x/text
は github.com/golang/text
に対応します。したがって、対応する 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 上のほとんどのミラー ウェアハウスにはタグがないため、バージョンを指定する必要がある場合、この方法では解決策がありません。さらに、特に依存関係が多すぎるため、プログラマが手動でそれを行うにはどうすればよいでしょうか。
プロキシの設定
プロキシ がある場合は、対応する環境変数を設定できます:
export http_proxy=http://proxyAddress:port export https_proxy=http://proxyAddress:portまたは、
all_proxy## を使用します。直接 #:<pre class="brush:php;toolbar:false">export all_proxy=http://proxyAddress:port</pre>
go mod replace
Go 1.11 バージョンから、
go modules の新しいサポートがパッケージの依存関係管理の問題を解決するために使用されます。このツールは、パッケージのエイリアスの問題を解決し、golang.org/x
がダウンロードできない問題も解決する replace
を提供します。
はネイティブの go mod
コマンドに統合されていますが、コード ベースが $GOPATH
にある場合、 モジュール
関数はデフォルトでは有効になっていません。有効にするのは非常に簡単です。環境変数 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.io が私たちが望むことを達成するのに役立ってくれたことです。このプロジェクトを使用すると、開発者はワンクリックで独自の
プロキシ サービスを構築できます。同時に、パブリック プロキシ サービス https://goproxy.io
も提供されます。ブロックされたソース コード パッケージを通常どおりダウンロードするには、この環境変数を設定するだけです: <pre class="brush:php;toolbar:false">export GOPROXY=https://goproxy.io</pre>
ただし、
go module function に依存する必要があります。 MODULE は
export GO111MODULE=on でオンにできます。 プロジェクトが
にない場合、go get ...
は使用できませんが、go mod ...
は使用できます。関連するコマンド。 この環境変数を空白に設定して、
をオフにすることもできます。 Windows ユーザーの場合は、
で設定できます: <pre class="brush:php;toolbar:false">$env:GOPROXY = "https://goproxy.io"</pre>
最後に、この環境変数に対して
ソリューションを使用することを強くお勧めします。ただし、Go バージョン >= 1.11
である必要があります。 最後に、Qiniu は国内ユーザーがアクセスできないパッケージにより速くアクセスできるようにするために、国内プロキシ goproxy.cn も立ち上げました。これは実に良心的です。