0%

使用 VSCode 开发 golang

本文参考自: https://abelsu7.top/2019/05/22/go-get-using-proxy/
另外,这篇文章的标题也不知道起什么好,感觉改成 使用代理运行 go get 的方法 更合适。
不过我确实一开始就是想用 VSCode 开发 golang 才遇到这个问题的,所以还是使用原标题算了吧…

我先吐槽一遍辣鸡百度,根本就搜不到我想要的东西!
最近还算有点时间,所以趁着闲的时候想要抽空学一学golang。

花了点时间查阅了网上的一些资料之后,觉得golang还是挺不错的,正好可以拿来做一做手上的几个项目。
由于之前写 Java 一直使用 IDEA 作为开发工具,所以对 jetbrains 这家公司和它的产品还是非常有好感的。但是奈何 GoLand 没有社区版,且专业版只有 30 天试用期。
这让我一个强迫症有些难受,而且我也不想支付 199 美元/年 的正版费用购买 GoLand 来学习go语言,更不想用盗版/破解版…

所以最后我还是决定用 VSCode 来学习开发 golang。

使用 VSCode 打开一个 .go 后缀的文件后,右下角会自动弹出提示请求安装 go语言相关拓展插件,点击安装即可。
这个插件安装完之后,会再弹出窗口请求安装 go 语言的一些模块:

The “go-outline” command is not available.
Run “go get -v github.com/ramya-rao-a/go-outline” to install.

The “gopls” command is not available.
Run “go get -v golang.org/x/tools/gopls” to install.

点击 install 之后, VSCode 会自动弹出控制台并执行安装命令,但在国内很有可能会因为某些 无法解释的 网络原因而导致下载失败。

Installing golang.org/x/tools/gopls FAILED

仓鼠花了一些时间去百度上搜索相关解决方案(其实只想知道怎么给 go get 开代理),使用了多个关键词组合:VSCode go插件 安装失败go get 安装失败go get 代理go get proxy等等…

然后发现找到的全都是 CSDN、OSChina 上写的一些又长又臭又没有营养的文章,好不容易找到了一篇相关文章,结果打开一看它让我手动去这个地址下载文件,然后存到 C:\Program Files\Go 里,这让我一个重度强迫症患者怎么受得了嘛。

辣鸡百度,果断换 Google 找解决办法,输入 go get proxy 之后找到的第一个就是某个人博客的文章。不得不说我对这种个人博客还是很有好感的,他们的内容无一例外都非常有质量(至少从我见到过的来看是这样)。

在查阅了 Abel Su(我并不认识这个人)的这篇文章之后我终于找到了一些有用的东西。

阅读 get.go 源码会发现,go get 命令通过 git clone 命令将远程仓库的代码拉取到本地。

根据官方 golang/go - GoGetProxyConfig | Github 的说明,需要设置git的代理:

1
git config [--global] http.proxy http://proxy.example.com:port

然而并没有起作用。。

搜索了一圈之后发现,需要设置 http_proxyhttps_proxy 这两个环境变量。

所以我打开控制台使用以下命令配置好临时环境变量。

1
2
set http_proxy=socks5://127.0.0.1:1080
set https_proxy=socks5://127.0.0.1:1080

然后再安装需要的库

1
2
go get -v github.com/ramya-rao-a/go-outline
go get -v golang.org/x/tools/gopls

接下来再回到 VSCode 里重新点击 install,然后所有依赖都成功安装了。

完成!

有一点值得注意的是,虽然使用以下命令可以设置 git 的全局代理

1
2
git config --global http.proxy 'socks5://localhost:1080'
git config --global https.proxy 'socks5://localhost:1080'

但是 golang 在下载安装依赖时似乎不会使用这个全局配置。

具体原因我没有仔细研究过,不过我猜它大概是因为 golang 内置了一个 git,而我们直接在控制台中使用命令设置的代理对象,是给系统中安装的那个 git 设置的代理。
由于两个 git 来源不同,所以导致 go 的安装无法使用到系统中 git 的全局变量。
但上面 set http_proxy=socks5://127.0.0.1:1080 设置的是临时环境变量,每次 git 启动时都会从环境变量中去查找这些值,因此无论是系统中的 git 还是 golang 中自带的 git 都能找到这个配置。

以上只是个人猜测,并不代表标准答案。

最后再吐槽一遍辣鸡百度,捏嘛就不能好好收录一些精品文章吗!那些个人博客明明都写的很不错,非要把 CSDN 和 OSChina 上面那种垃圾到甚至一句话都能写出三四个语法错误的文章拿出来糊在首页吗?!

人生不易,仓鼠断气