VSCode安装go插件失败的解决方案

构建Go开发环境,安装Go本身倒好说,VSCode里面安装Go插件也简单,但是,但是,当你想使用一些自动提示、代码格式化插件的时候,

就会提示缺少工具了,在VSCode里直接安装,如果成功了,那么恭喜你,如果跟我一样失败了(国内用户大概率是会失败的,原因你懂的),那就看看下面吧

本文参考了 http://t.zoukankan.com/ricebug2-p-14154142.html ,并根据自己的实践和理解作了一点修改

关键就是两点,一个是设置GOPATH,一个是设置代理

本文使用的go版本是go1.18.4,系统是Windows,以下是本人的探索,不一定全对,仅供参考

一、设置GOPATH

首先要搞清楚GOPATH是干什么用的,其实它指向一个目录,当你使用go来安装一些包的时候,会安装到这个目录下面。

基于以前开发Python的经验,这个GOPATH实际上有两种用法,也就是全局设置和局部设置。

先说全局设置,新版本的Go安装后会自动设置一个默认的GOPATH,通常在当前用户的目录下,比如我的电脑上就是 C:\Users\Administrator\go

可以通过设置环境变量GOPATH来修改它,也可以使用go env来设置这个值,改到其它位置。
go env -w GOPATH=F:\Go\myproject

 两种方式都可以,而且都是全局的(设置完之后,你可以新开一个cmd窗口,执行go env来检查),但环境变量的优先级更高

这样,我们接下来安装go插件的时候,会统一安装到此目录下,相当于全局安装

如果你只想针对某个项目设置GOPATH,就把这个GOPATH设置为项目的路径,gopath/src下面放你的源码。

这样安装依赖包的时候就不是全局安装了,只会安装到GOPATH指定的目录下面,也就是与具体项目相关,避免全局安装时不同的包版本可能产生冲突。

在go支持modules方式创建项目之后,GOPATH就不是必须的了,但是设置它仍然是有好处的

二、设置代理

由于众所周知的原因,我们很难直接从github.com下载插件,所以就必须要设置一个代理,执行如下命令

go env -w GOPROXY=https://goproxy.io,direct

 然后先安装一些必要的工具:

go install -v github.com/stamblerre/gocode@latest
go install -v github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest
go install -v github.com/ramya-rao-a/go-outline@latest
go install -v github.com/acroca/go-symbols@latest
go install -v golang.org/x/tools/cmd/guru@latest
go install -v golang.org/x/tools/cmd/gorename@latest
go install -v github.com/cweill/gotests@latest
go install -v github.com/fatih/gomodifytags@latest
go install -v github.com/josharian/impl@latest
go install -v github.com/davidrjenni/reftools/cmd/fillstruct@latest
go install -v github.com/haya14busa/goplay/cmd/goplay@latest
go install -v github.com/godoctor/godoctor@latest
go install -v github.com/go-delve/delve/cmd/dlv@latest
go install -v github.com/stamblerre/gocode@latest
go install -v github.com/rogpeppe/godef@latest
go install -v github.com/sqs/goreturns@latest
go install -v golang.org/x/lint/golint@latest
go install -v golang.org/x/tools/gopls@latest

 你可以把上面的内容保存为bat文件,直接执行即可, 在设置了代理之后,以上安装过程就可以成功了

如果你使用了新的module模式,那么就不是使用go install了,而是使用go get

go get -u -v github.com/stamblerre/gocode@latest
go get -u -v github.com/uudashr/gopkgs/v2/cmd/gopkgs@latest
go get -u -v github.com/ramya-rao-a/go-outline@latest
go get -u -v github.com/acroca/go-symbols@latest
go get -u -v golang.org/x/tools/cmd/guru@latest
go get -u -v golang.org/x/tools/cmd/gorename@latest
go get -u -v github.com/cweill/gotests@latest
go get -u -v github.com/fatih/gomodifytags@latest
go get -u -v github.com/josharian/impl@latest
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct@latest
go get -u -v github.com/haya14busa/goplay/cmd/goplay@latest
go get -u -v github.com/godoctor/godoctor@latest
go get -u -v github.com/go-delve/delve/cmd/dlv@latest
go get -u -v github.com/stamblerre/gocode@latest
go get -u -v github.com/rogpeppe/godef@latest
go get -u -v github.com/sqs/goreturns@latest
go get -u -v golang.org/x/lint/golint@latest
go get -u -v golang.org/x/tools/gopls@latest

而且我发现,如果已经在GOPATH下面全局安装过这些插件,在module模式下go get的时候似乎只是添加了一个依赖,而没有重新安装

这也是我推荐先设置GOPATH并进行全局安装的原因。

当然,并不是所有的插件和模块都提倡全局安装(不同项目的依赖版本可能不一样),但上面这些基础工具是没问题的

这时候再通过vscode打开go项目,应该就可以使用提示、代码检查等插件了

如果还缺少其它的插件,vscode会提示进行安装,在设置了代理之后,应该都可以安装成功,此时就可以愉快的编写Go程序了!

以下就是效果了:

 

最后再推荐一个小工具rizla

go install -v github.com/kataras/rizla@latest

 对初学者,需要频繁的修改代码,重新编译、运行,每次都这样做会很麻烦。

使用这个小工具之后,它可以自动监测源文件变化并重新编译执行,省去了手动操作的麻烦。

$ rizla main.go #single project monitoring
$ rizla C:/myprojects/project1/main.go C:/myprojects/project2/main.go #multi projects monitoring
$ rizla -walk main.go #prepend '-walk' only when the default file changes scanning method doesn't works for you.
$ rizla -delay=5s main.go # if delay > 0 then it delays the reload, also note that it accepts the first change but the rest of changes every "delay".

 以上是最常用的几种方式。新手记住第一种就足够了。

posted @ 2022-07-17 11:15  黑月教主  阅读(2008)  评论(0编辑  收藏  举报