問題の説明
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## を使用します。直接 #:
go mod replaceexport all_proxy=http://proxyAddress:port
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
も提供されます。ブロックされたソース コード パッケージを通常どおりダウンロードするには、この環境変数を設定するだけです:
ただし、export GOPROXY=https://goproxy.io
go modulefunctionに依存する必要があります。 MODULE は
export GO111MODULE=onでオンにできます。プロジェクトが
にない場合、go get ...
は使用できませんが、go mod ...
は使用できます。関連するコマンド。この環境変数を空白に設定して、
をオフにすることもできます。Windows ユーザーの場合は、
で設定できます:
最後に、この環境変数に対して$env:GOPROXY = "https://goproxy.io"
ソリューションを使用することを強くお勧めします。ただし、Go バージョン >= 1.11
である必要があります。最後に、Qiniu は国内ユーザーがアクセスできないパッケージにより速くアクセスできるようにするために、国内プロキシ goproxy.cn も立ち上げました。これは実に良心的です。