文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

当go get遇到墙时该怎么办

2023-06-19 10:04

关注

今天就跟大家聊聊有关当go get遇到墙时该怎么办,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

作为一名从py转向go语言的新手,在使用第三方包的时候我们需要比较熟悉该包或者模块的构建与安装,好比在使用pip或者easy_install之类的工具安装模块时经常会遇到底层库或者工具包的依赖再或者网络超时而导致模块安装失败。然而在使用go的过程中,虽然不必像py那样为一个复杂模块去解决各种的依赖关系,但在使用go get的过程中也不一定一帆风顺,比如你去下载golang.org上的包时,对不起,一般肯定是会被墙掉的。

为何会被墙掉?

&^*(^*%^&*)&*^&*%$%$^&*(*()&*^&%^&()**(%$%&*((^%%^*(*)*)总之,由于某某原因,它和它家的主人google都被墙掉了。

如何解决?

两种方式:第一种无非就是使用vpn技术啦,然后再在本地配个代理啥的,不过既然都是开源的东西,就一定能够从github上面clone下来。所以第二种方式就是就是去从github上面直接clone下来,然后搞成go可以识别的包就可以啦github.com现在肯定是不会被墙啦。 vpn的方式就是搭了个梯子然后配置下代理就可以直接使用go get了,这里主要讲一下第二种方式去安装第三方包。

假设我想使用go语言的docker客户端去封装改造一些东西,通过go get -v 可以查看到安装package的详情

$go get -v github.com/fsouza/go-dockerclientpackage golang.org/x/net/html: unrecognized import path "golang.org/x/net/html" (https fetch: Get https://golang.org/x/net/html?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)package golang.org/x/net/html/atom: unrecognized import path "golang.org/x/net/html/atom" (https fetch: Get https://golang.org/x/net/html/atom?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

由以上提示可以大概猜得到,本地服务器肯定是无法访问golang.org的,因此在下载golang.org相关的包的时候无法下载导致dockerclient下载失败。

由于go get其实是将package下载下来,然后进行本地安装的,因此我们也可以讲golang.org的相关包clone到本地然后再进行安装。

1.查看配置环境

主要的就是GOPATH和GOROOT

# go envGOARCH="amd64"GOBIN=""GOEXE=""GOHOSTARCH="amd64"GOHOSTOS="linux"GOOS="linux"GOPATH="/export/test-go"GORACE=""GOROOT="/export/go"GOTOOLDIR="/export/go/pkg/tool/linux_amd64"GO15VENDOREXPERIMENT="1"CC="gcc"GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"CXX="g++"CGO_ENABLED="1"

注意:所有下载的包都会默认放在GOPATH,因此这个目录是必须的,且一般包含src pkg bin三个目录,分别存放源码包,编译包以及可执行文件

2.下载安装golang.org/x/net

为了使包的导入方式不变,我们需要在src目录下面构造目录结构

$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

执行go install之后没有提示,就说明安装好了。

3.再次安装go的dockerclient
# go get -v  github.com/fsouza/go-dockerclient github.com/fsouza/go-dockerclient (download)github.com/docker/docker (download)github.com/docker/go-units (download)github.com/hashicorp/go-cleanhttp (download)github.com/docker/docker/api/types/networkgithub.com/docker/docker/pkg/promisegithub.com/docker/docker/api/types/blkiodevgithub.com/docker/docker/api/types/mountgithub.com/docker/docker/api/types/strslicegithub.com/docker/docker/vendor/github.com/docker/go-connections/natgithub.com/docker/docker/vendor/github.com/docker/go-unitsgithub.com/docker/docker/api/types/versionsgithub.com/docker/docker/api/types/registrygithub.com/docker/docker/vendor/github.com/Sirupsen/logrusgithub.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/usergithub.com/docker/docker/vendor/golang.org/x/net/contextgithub.com/docker/docker/vendor/github.com/opencontainers/runc/libcontainer/systemgithub.com/docker/docker/vendor/github.com/Nvveen/Gottygithub.com/docker/docker/pkg/jsonloggithub.com/docker/docker/pkg/termgithub.com/docker/docker/pkg/stdcopygithub.com/docker/go-unitsgithub.com/hashicorp/go-cleanhttpgolang.org/x/net/contextgithub.com/docker/docker/api/types/filtersgithub.com/docker/docker/pkg/systemgithub.com/docker/docker/pkg/ioutilsgolang.org/x/net/context/ctxhttpgithub.com/docker/docker/api/types/containergithub.com/docker/docker/pkg/idtoolsgithub.com/docker/docker/api/types/swarmgithub.com/docker/docker/pkg/fileutilsgithub.com/docker/docker/pkg/poolsgithub.com/docker/docker/api/typesgithub.com/docker/docker/pkg/homedirgithub.com/docker/docker/pkg/jsonmessagegithub.com/docker/docker/pkg/archivegithub.com/docker/docker/optsgithub.com/fsouza/go-dockerclient

使用-v参数可以查看该包关联的所有包,可以看到已经成功安装

4.测试Docker客户端的使用github.com/fsouza/go-dockerclient

示例:查看当前docker主机上所下载的images

#cat JFdocker.gopackage mainimport ("fmt""github.com/fsouza/go-dockerclient""strings")func main() {//定义一个socker文件路径endpoint := "unix://var/run/docker.sock"//创建一个docker客户端链接client, err := docker.NewClient(endpoint)//判断是否异常,并且捕获if err != nil {panic(err)}//使用创建的client进行listimages操作images, err := client.ListImages(docker.ListImagesOptions{All: false})if err != nil {panic(err)}//使用range迭代所有images信息for _, img := range images {fmt.Printf("ID:%v\tTag:%v\t\t Size:%v\t\t VSize:%v\n",//image.ID为一个string类型并且以sha215:开头 strings.Split('strings','split')可以将结果分割并且存放在slice中strings.Split(img.ID, ":")[1][:12],img.RepoTags, img.Size, img.VirtualSize)}}编译并执行程序:#go build JFDocker.gosh-4.2# ./JFDocker ID:e740f4a4a24dTag:[centos6.8-test-app:v2] Size:2411566940 VSize:2411566940ID:d5cb0af109deTag:[centos6.8-test-app:latest] Size:2408322269 VSize:2408322269ID:67591570dd29Tag:[centos:latest] Size:191839169 VSize:191839169

可以看到,现在就可以成功的使用go的docker client进行开发程序了。至此,我们已经成功的解决了go get 无法安装golang.org相关的包了。

看完上述内容,你们对当go get遇到墙时该怎么办有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯