墙内安装 golang.org 中的包

本文将介绍如何在不翻墙的情况下安装 Go 的第三方包(包含 golang.org 中的包)。

需求:linux 系统

 

首先,我们需要设置一下环境变量,这样之后的 Go 包会放置在 $GOPATH/src/ 下

 

其次聊聊 go get 的原理,本质上来说 go get 命令所产生的效果就是从指定的地方下载一份代码放到指定的 $GOPATH/src/ 的对应目录下,之后切入目录执行 go install。

按照上面的逻辑,以 nsf/gocode 包为例。我们尝试一下

ok,成功。同时我们也可以在 $GOPATH/src 下看到对应的目录结构(/src/github.com/nsf/gocode)

那我们再试试别的?这次我们试试 ramya-rao-a/go-outline 包。

呃。这次似乎并不顺利,仔细阅读日志就可以发现,我们确实是从 GitHub 去获取我们要的包的,但是他却莫名其妙的访问了 https://golang.org/x/ ,由于中国局域网里并不存在这个网址,所以整个安装过程就失败了。

这时候官方就因此提供了一份 GitHub 镜像 github.com/golang/ 我们可以访问这里下载对应的包。

日志里我们看到他尝试获取了 tools/go/buildutil 包,众所周知 Go 语言是可以进行编译的,这个包实际上就是将 go-outline 包进行编译以达到更快的速度。

那么我们就先从镜像那里预装一下 tools/go/buildutil 包

又出问题了。tools/go/buildutil 的代码似乎硬引入了自己,但是由于我们是从 GitHub 的镜像站,所以下载后的保存地址为 $GOPATH/src/github.com/golang/ 而他需求的地址为 $GOPATH/src/golang.org/x/。

 

那我们现在该怎么办呢,我们已经知道镜像站实际上是把原本 golang.org/x/ 中的东西原本的照搬到了 github.com/golang/ ,那么我们只要在 $GOPATH 中把 golang.org/x/ 软连接到 github.com/golang/ 目录上即可

我们知道 go get 在 git 环境下本质上是 git clone + go install

上一步我们在执行 go install 时报错了。那么现在我们进入 $GOPATH/src/golang.org/x/tools/go/buildutil 并执行 go install

ok,构建工具就安装完成了,我们再次尝试安装 go-outline

成功。

现在我们再回去打开 VSCode 按下 F1 执行 Go:Install/Update Tools

All tools successfully installed. You’re ready to Go 🙂

参考:

https://beego.me/quickstart

https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.3.md

《墙内安装 golang.org 中的包》上有4条评论

发表评论

电子邮件地址不会被公开。