>  기사  >  백엔드 개발  >  golang.org/x 패키지를 다운로드하여 실패한 문제를 빠르게 해결하세요.

golang.org/x 패키지를 다운로드하여 실패한 문제를 빠르게 해결하세요.

藏色散人
藏色散人앞으로
2021-12-02 14:42:453063검색

이 글은 go 언어 튜토리얼 칼럼에서 한 번의 클릭으로 go get golang.org/x 패키지 실패 문제를 해결하는 방법을 소개하기 위해 작성되었습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

golang.org/x 패키지 실패를 가져오는 원클릭 솔루션

문제 설명

go get, go install, go를 사용할 때 mod 및 기타 명령을 실행하면 해당 패키지 또는 종속 패키지가 자동으로 다운로드됩니다. 그러나 잘 알려진 이유로 인해 <code>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)

解决方式

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

最后,我们当然推荐使用 GOPROXYrrreeeSolution

그렇다면 어떻게 문제를 해결할 수 있을까요? 결국 여전히 버그가 있습니다~

수동 다운로드

우리의 일반적인 golang.org/x/... 패키지에는 일반적으로 GitHub의 공식 미러 저장소가 있습니다. 예를 들어 golang.org/x/textgithub.com/golang/text에 해당합니다. 따라서 해당 GitHub 저장소를 지정된 디렉터리에 수동으로 다운로드하거나 복제할 수 있습니다.
rrreee🎜버전을 지정해야 할 때 이 방법은 해결책이 없습니다. GitHub의 미러 웨어하우스 대부분에는 태그가 없기 때문입니다. 더욱이, 특히 종속성이 너무 많기 때문에 프로그래머가 어떻게 수동으로 이를 수행할 수 있습니까? 🎜

프록시 설정

🎜 🎜프록시가 있는 경우🎜 해당 환경 변수를 설정할 수 있습니다: 🎜rrreee🎜 또는 all_proxy를 직접 사용: 🎜rrreee

go mod 교체

🎜Go 버전 1.11부터 패키지 종속성 관리 문제를 해결하기 위해 go 모듈이 새롭게 지원됩니다. 이 도구는 패키지 별칭 문제를 해결하기 위해 replace를 제공합니다. golang.org/x를 다운로드할 수 없는 문제도 해결할 수 있습니다. 🎜🎜go 모듈은 기본 go mod 명령에 통합되어 있지만 코드 베이스가 $GOPATH에 있는 경우 모듈 code> 이 기능은 기본적으로 활성화되어 있지 않습니다. 활성화하는 방법은 매우 간단합니다. <code>export GO111MODULE=on 환경 변수를 통해 활성화할 수 있습니다. 🎜🎜다음은 참조 예입니다. 🎜rrreee🎜마찬가지로 다양한 솔루션을 제공하는 glide 및 gopm과 같은 타사 패키지 관리 도구가 있습니다. 🎜

GOPROXY 환경 변수

🎜드디어 이 기사의 궁극적인 킬러인 🎜GOPROXY🎜에 도달했습니다. 🎜🎜 Go 1.11 버전부터 go 모듈 패키지 종속성 관리 도구가 공식적으로 지원되는 것으로 알고 있습니다. 🎜🎜사실 GOPROXY 환경 변수도 추가되었습니다. 이 변수를 설정하면 이전처럼 코드 라이브러리에서 직접 다운로드하지 않고, 이 환경 변수에 설정된 프록시 주소를 통해 소스 코드를 다운로드하게 됩니다. 이는 과학적으로 인터넷에 접근할 수 없는 우리 같은 개발자에게는 의심할 여지 없이 가장 좋은 소식입니다. 🎜🎜더욱 기쁜 점은 오픈 소스 프로젝트 goproxy.io가 우리가 원하는 것을 달성하는 데 도움이 된다는 것입니다. 이 프로젝트를 통해 개발자는 클릭 한 번으로 자신만의 GOPROXY 프록시 서비스를 구축할 수 있습니다. 동시에 공개 프록시 서비스 https://goproxy.io도 제공됩니다. 차단된 소스 코드 패키지를 정상적으로 다운로드하려면 이 환경 변수만 설정하면 됩니다. 🎜rrreee🎜그러나 🎜 go 모듈 함수 🎜에 종속성이 필요합니다. MODULE은 export GO111MODULE=on을 통해 켤 수 있습니다. 🎜🎜프로젝트가 GOPATH에 없으면 go get...을 사용할 수 없지만 관련 go mod...를 사용할 수 있습니다. 명령. 🎜🎜이 환경 변수를 공백으로 설정하여 export GOPROXY=를 끌 수도 있습니다. 🎜🎜Windows 사용자의 경우 PowerShell에서 설정할 수 있습니다. 🎜rrreee🎜마지막으로 🎜Go 버전 > 1.11🎜. 🎜🎜마지막으로 Qiniu는 국내 사용자가 액세스할 수 없는 패키지에 더 빠르게 액세스할 수 있도록 국내 프록시 goproxy.cn도 출시했습니다. 이는 정말 양심적인 일입니다. 🎜🎜

위 내용은 golang.org/x 패키지를 다운로드하여 실패한 문제를 빠르게 해결하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제