Maison> développement back-end> Golang> le corps du texte

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

藏色散人
Libérer: 2021-12-02 14:42:45
avant
2952 Les gens l'ont consulté

本文由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)
Copier après la connexion

解决方式

那我们该如何解决问题呢?毕竟还要制造 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
Copier après la connexion

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

设置代理

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

export http_proxy=http://proxyAddress:port export https_proxy=http://proxyAddress:port
Copier après la connexion

或者,直接用all_proxy

export all_proxy=http://proxyAddress:port
Copier après la connexion

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 )
Copier après la connexion

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

GOPROXY 环境变量

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

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

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

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

export GOPROXY=https://goproxy.io
Copier après la connexion

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

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

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

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

$env:GOPROXY = "https://goproxy.io"
Copier après la connexion

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!