快速解决go get golang.org/x 包不成功的问题

藏色散人
Freigeben: 2021-12-02 14:42:45
nach vorne
2952 Leute haben es durchsucht

本文由go语言教程栏目给大家介绍如何一键解决 go get golang.org/x 包失败问题,希望对需要的朋友有所帮助!

一键解决 go get golang.org/x 包失败

问题描述

当我们使用go getgo 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)
Nach dem Login kopieren

解决方式

那我们该如何解决问题呢?毕竟还要制造 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
Nach dem Login kopieren

当如果需要指定版本的时候,该方法就无解了,因为 GitHub 上的镜像仓库多数都没有 tag。并且,手动嘛,程序员怎么能干呢,尤其是依赖的依赖,太多了。

设置代理

如果你有代理,那么可以设置对应的环境变量:

export http_proxy=http://proxyAddress:port export https_proxy=http://proxyAddress:port
Nach dem Login kopieren

或者,直接用all_proxy

export all_proxy=http://proxyAddress:port
Nach dem Login kopieren

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 )
Nach dem Login kopieren

类似的还有 glide、gopm 等这类第三方包管理工具,都不同方式的解决方案提供给我们。

GOPROXY 环境变量

终于到了本文的终极大杀器 ——GOPROXY

我们知道从Go 1.11版本开始,官方支持了go module包依赖管理工具。

其实还新增了GOPROXY环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。这无疑对我等无法科学上网的开发良民来说是最大的福音。

更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的GOPROXY代理服务。同时,也提供了公用的代理服务https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了:

export GOPROXY=https://goproxy.io
Nach dem Login kopieren

不过,需要依赖于go module功能。可通过export GO111MODULE=on开启 MODULE。

如果项目不在GOPATH中,则无法使用go get ...,但可以使用go mod ...相关命令。

也可以通过置空这个环境变量来关闭,export GOPROXY=

对于 Windows 用户,可以在PowerShell中设置:

$env:GOPROXY = "https://goproxy.io"
Nach dem Login kopieren

最后,我们当然推荐使用GOPROXY这个环境变量的解决方式,前提是Go version >= 1.11

最后的最后,七牛也出了个国内代理 goproxy.cn 方便国内用户更快的访问不能访问的包,真是良心。

Das obige ist der detaillierte Inhalt von快速解决go get golang.org/x 包不成功的问题. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!