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".
以上是最常用的几种方式。新手记住第一种就足够了。