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

 

From:https://segmentfault.com/a/1190000018264719

 

 

问题描述

 

在 ubuntu 上用 sudo apt install golang-go 安装 go 的 sdk,之后使用 go getgo installgo mod 等命令时 (会自动下载相应的包或依赖包) 时,但由于众所周知的原因(),类似于 golang.org/x/... 的包会出现下载失败的情况。如下所示:

$ go get -u golang.org/x/sysgo 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)

 

 

解决方式

 

那我们该如何解决问题呢?下面列出几种方法。

 

1. 手动下载

golang 在 github 上建立了一个镜像库,下载 github 上的镜像库放入 GOPATH 下即可。比如 golang.org/x/net 对应 https://github.com/golang/net.git 。所以,我们可以手动下载 或 clone 对应的 GitHub 仓库到指定的目录下。

go 环境变量

export GOROOT=/usr/local/go
export GOPATH=/home/king/go      # root用户可以设置为 export GOPATH=/root/go
export PATH=$PATH:$GOROOT/bin

GOROOT 为安装目录   GOPATH 是 go 的工作区,代码和工程都可以添加到这里。

解决方法如下:

vim ~/.bashrc 或者vim /etc/profile

GG 到最后一行,添加:

export GOPATH=/root/go/

使配置生效

source .bashrc

安装 go 的 net 包。

mkdir -p $GOPATH/src/golang.org/x/cd $GOPATH/src/golang.org/x/git clone https://github.com/golang/net.git net go install net

再之后,就可以愉快的 get了,比如如下:

go get github.com/lucas-clemente/quic-go

如果用源码安装 go,那么 install 会设置 GOPATH 和 net 的,看来 apt-get 就是一时爽,补丁还得自己打。

如果报 “ golang 程序编译时提示“package runtime: unrecognized import path "runtime" (import path does not begin with hostname)” ,可以执行:unset GOROOT  解决问题;

mkdir -p $GOPATH/src/golang.org/x/cd $GOPATH/src/golang.org/x/git clone https://github.com/golang/net.git
git clone https://github.com/golang/sync.gitgo install net
go install sync

项目放在 $GOPATH/src,执行 go get 即可成功。其它 golang.org/x 下的包获取皆可使用该方法。

例如,很多go的软件在编译时都要使用tools里面的内容,使用下面方法获取:

进入上面的 x 目录下,输入:

git clone https://github.com/golang/tools.git

注意:一定要保持与 go get 获取的目录结构是一致的,否则库就找不到了。

 

get grpc 包的时候

$ go get google.golang.org/grpc

发现拉不下来被墙了,在 github.com上搜索 grpc,clone 到工程目录中,运行命令

go install google.golang.org/grpc

拿到了一些丢失的依赖包,比如:

进入 https://github.com/golang 仓库找到对应的包,git clone下来,放到指定的目录中,比如上图缺少的 golang.org/x/net/http2包,在 github 上把 net 包 clone 下来,如下:

git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net

其他包也如此操作,全部完成后,再运行

go install google.golang.org/grpc

成功,问题解决。

 

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

go build -a    -x -v
加上 -a 强制 go 重新编译。

 

 

2. 设置代理

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

export http_proxy=http://proxyAddress:portexport https_proxy=http://proxyAddress:port

或者,直接用 all_proxy

export all_proxy=http://proxyAddress:port

 

3. go mod replace

从 Go 1.11 版本开始,新增支持了 go modules 用于解决包依赖管理问题。该工具提供了 replace,就是为了解决包的别名问题,也能替我们解决 golang.org/x 无法下载的的问题。

go module 被集成到原生的 go mod 命令中,但是如果你的代码库在 $GOPATH 中,module 功能是默认不会开启的,想要开启也非常简单,通过一个环境变量即可开启 export GO111MODULE=on

以下为参考示例:

module example.com/hellorequire (
golang.org/x/text v0.3.0)replace (
golang.org/x/text => github.com/golang/text v0.3.0
)

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

 

4. GOPROXY 环境变量

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

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

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

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

# Enable the go modules feature
export GO111MODULE=on
# Set the GOPROXY environment variable
export GOPROXY=https://goproxy.io

把上面配置写入到 .bashrc 或者 .bash_profile 文件。重启系统使配置生效。

如果项目不在 GOPATH 中,则无法使用 go get ...,但可以使用 go mod ... 相关命令。也可以通过置空这个环境变量来关闭,export GOPROXY=

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

# Enable the go modules feature
$env:GO111MODULE="on"
# Set the GOPROXY environment variable
$env:GOPROXY="https://goproxy.io"

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

 

 

参考资料

  • goproxy.io for Go modules
  • goproxy.io

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「对抗深度强化学习」是如何解决自动驾驶汽车系统中的「安全性」问题的?...

原文来源:arXiv作者:Aidin Ferdowsi、 Ursula Challita、Walid Saad、Narayan B. Mandayam「雷克世界」编译:嗯~是阿童木呀、KABUDA对于自动驾驶汽车(AV)而言,要想在未来的智能交通系统中以真正自主的方式运…

小甲鱼 OllyDbg 教程系列 (五) : 破解 PC Surgeon 之 查找字符串

https://www.bilibili.com/video/av6889190/?p11 https://www.bilibili.com/video/av6889190/?p12 程序下载地址:https://pan.baidu.com/s/1eVTLQ_AatLrmrz3FLwM5ww 提取码:wny9 修复 OllyDBG 右键 -> 复制到可执行文件 -> 所有修改 中 所…

深度概览卷积神经网络全景图,没有比这更全的了

来源: 人工智能头条 翻译 | 林椿眄摘要:深度卷积神经网络是这一波 AI 浪潮背后的大功臣。虽然很多人可能都已经听说过这个名词,但是对于这个领域的相关从业者或者科研学者来说,浅显的了解并不足够。通过这篇文章,我们…

小甲鱼 OllyDbg 教程系列 (四) : 逆向 VisualSite Designer 之 硬件断点

去掉程序开始之前的界面:https://www.bilibili.com/video/av6889190?p9 去掉关闭程序后的广告:https://www.bilibili.com/video/av6889190?p10 VisualSite Designer.exe 下载地址:https://pan.baidu.com/s/1i-fi1wW-m0Cp72yyB_SBFw 提取码…

复杂人机智能系统功能分配方法综述

本文来源:人机与认知实验室摘要:功能分配是复杂人机智能系统设计进程中的重要内容, 它需要应用系统的分析方法, 合理地进行人、机两者的任务分配和科学地设计两者的功能结合。本文分析了国内外功能分配的研究现状和存在的问题。针对复杂人机智能系统的设计需求, 指出…

生物学将是下一代计算平台:DNA是代码,CRISPR是编程语言

来源:36氪每一个行业都在向Crispr投入大量的资金——制药、农业、能源、材料制造。甚至连那些大麻贩子都想砸钱进去。机器里面,运行的并不是由0和1组成的互联网编码,而是能重写生命密码的分子。日前,《连线》杂志发表了一篇文章&a…

Python 中使用 jsonpath

JSONPath 解析 JSON 内容详解(翻译自 github):https://blog.csdn.net/freeking101/article/details/103048514 JSONPath Online Evaluator:http://jsonpath.com Python 处理 JSON 我选择 ujson 和 orjson:https://bl…

【重磅】吴恩达宣布 Drive.ai 自动驾驶汽车服务落地 理想就这样成了现实!

来源: 网易智能美国当地时间5月7日,硅谷无人车创业公司 Drive.ai 宣布将于2018年7月在德克萨斯州弗里斯科市提供自动驾驶汽车服务。这或许会成为美国第一个真正落地的自动驾驶汽车载人服务,也标志着公众第一次有机会在公共道路上使用按需定制…

小甲鱼 OllyDbg 教程系列 (八) :fjproducer 逆向 之 困境

小甲鱼 OllyDBG 教程:https://www.bilibili.com/video/av30969642?p15 程序下载地址: https://pan.baidu.com/s/1xTBrvuAx6hsyHQ2RsYiCoA 提取码: 11sd 打开程序显示如下: 可以看到标题栏的 Flash Jigsaw Produce (unregistered),可以根…

在sharepoint中添加视频播放

年初的时候想把公司举办的春晚发布在sharepoint中供大家观看,但是视频文件太大了,放到文档库中存储到数据库中是一个不切实际的办法,后来就搁置了。 其实也一直在想优酷等视频网站的发布方式,但没能得到解答。最近无意中发现了网页…

打破国外垄断,我国拿下一项“制芯”关键技术

来源:科技日报“PM2.5,是大家很熟悉的微小颗粒物,直径小于或等于2.5微米。但我们研制这种制造芯片的关键材料,在过程中如果进入了哪怕PM1.0的粉尘,这个材料就是废品,就不能被应用到芯片当中。”唐一林唐一林…

西电焦李成教授解读《高等学校人工智能创新行动计划》

来源:砍柴网不久之前,教育部公布了《高等学校人工智能创新行动计划》(以下简称计划),计划在人工智能人才培养、产学研等方面有哪些亮点?人工智能领域学科建设前景如何?针对公众关注的问题&#…

Git 和 Github 秘籍

GitHub秘籍 Git 和 Github 秘籍,灵感来自于 Zach Holman 在 2012 年 Aloha Ruby Conference 和 2013 年 WDCNZ 上所做的演讲:Git and GitHub Secrets(slides) 和 More Git and GitHub Secrets(slides)。 其他语言版本: English, 한국어, 日本語, 简体中…

为什么人类大脑与众不同?这种模式动物或揭开大脑体积演化之谜

来源 | HOWARD HUGHES MEDICAL INSTITUTE翻译 | 周盈宵审校 | 常玮导语:通过使一个与人类小头畸形相关的基因失活,研究人员得到第一只神经系统变异的雪貂。霍华德休斯医学研究所(HHMI)的研究者Christopher Walsh说,尽管…

小甲鱼 OllyDbg 教程系列 (七) :VB 程序逆向分析

小甲鱼视频:https://www.bilibili.com/video/av6889190?p14 VB程序逆向反汇编常见的函数:https://www.cnblogs.com/bbdxf/p/3780187.html 程序下载地址:链接:https://pan.baidu.com/s/18igiL-YWn9wnIrJfKT8gBA 提取码&…

一文尽揽2018 Google I/O:谷歌让你感受到AI科技的魅力

来源:智者无疆摘要:今年的主角依然是AI人工智能,它已经融入谷歌产品与软件系统中,但这次,谷歌在讲解AI或产品功能时候从理解人类和人性的角度举例,把AI带到了科技与人文的十字路口上。5月9日凌晨消息&#…

小甲鱼 OllyDbg 教程系列 (六) :PJ 软件功能限制(不修改jnz的非爆破方法)

小甲鱼视频地址:https://www.bilibili.com/video/av6889190?p13 小甲鱼OD学习第9讲:https://www.bbsmax.com/A/x9J23xEM56/ 程序下载地址:https://pan.baidu.com/s/1JTQ32xIBV6XiPtuXsOIgiw 提取码: r5t4 这次我们的任务是 pj 去掉注册软…

HTTP 和 HTTPS 协议

HTTP协议是什么? 简单来说,就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范,这个规范就是HTTP协议。 HTTP协议能做什么? 很多人首先一定会想到:浏览网页。没错,浏…

卡耐基梅隆大学提出新型「自适应」技术,可提高「个性化神经机器翻译」质量...

原文来源:arXiv作者:Paul Michel、Graham Neubig「雷克世界」编译:嗯~是阿童木呀导语:现如今,随着人工智能的发展,机器翻译在一定程度上取得了很大的进展,但是大家都知道,语言的产生…

小甲鱼 OllyDbg 教程系列 (九) :Delphi 程序逆向特点

小甲鱼 OllyDBG 使用教程:https://www.bilibili.com/video/av30969642?p16 OD 实验(十二) - 对一个 Delphi 程序的逆向:https://www.cnblogs.com/sch01ar/p/9678256.html 程序下载地址:https://pan.baidu.com/s/1Gb97C6HBNlmph7MbGrN_SQ …