在 VScode 使用过程中,会提示安装 各种 go 插件,点击安装后,很多插件安装都会失败

其中,安装失败的包主要是 golang.org 上的包(由于众所周知的原因),而很多其他包又依赖这些包,所以 VScode 的 golang 环境用起来就不顺畅了,如没有自动提示,没有自动格式化

VSCode 官方依赖列表

vscode 官方提供了一个 go extension 依赖列表 -> Go tools that the Go extension depends on · Microsoft/vscode-go Wiki

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/mdempsky/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v golang.org/x/tools/cmd/godoc
go get -u -v github.com/zmb3/gogetdoc
go get -u -v golang.org/x/lint/golint
go get -u -v github.com/fatih/gomodifytags
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/goimports
go get -u -v github.com/cweill/gotests/...
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/josharian/impl
go get -u -v github.com/haya14busa/goplay/cmd/goplay
go get -u -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -u -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -u -v github.com/alecthomas/gometalinter
gometalinter --install

将这些脚本拷贝到命令行执行,部分 golang.org 下的包是无法成功 get 的

将上述依赖列表分成两部分,一部分是 golang.org 下的包,一部分是 非 golang.org 下的包

非 golang.org 包

对于 非 golang.org 下的包,可通过以下脚本处理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
go get -u -v github.com/ramya-rao-a/go-outline
go get -u -v github.com/acroca/go-symbols
go get -u -v github.com/mdempsky/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/zmb3/gogetdoc
go get -u -v github.com/fatih/gomodifytags
go get -u -v github.com/sqs/goreturns
go get -u -v github.com/cweill/gotests
go get -u -v github.com/josharian/impl
go get -u -v github.com/haya14busa/goplay
go get -u -v github.com/uudashr/gopkgs
go get -u -v github.com/davidrjenni/reftools
go get -u -v github.com/alecthomas/gometalinter

golang.org 包

对于 golang.org 下的包,则需要进行特殊处理:克隆 github.com 上的镜像包到固定目录

进入 $GOPATH/src/golang.org/x , 若无此目录,新建即可。将以下脚本内拷贝到命令行执行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
git clone git@github.com:golang/lint.git
git clone git@github.com:golang/tools.git
git clone git@github.com:golang/appengine.git
git clone git@github.com:golang/time.git
git clone git@github.com:golang/net.git
git clone git@github.com:golang/text.git
git clone git@github.com:golang/image.git
git clone git@github.com:golang/sys.git
git clone git@github.com:golang/sync.git
git clone git@github.com:golang/mobile.git
git clone git@github.com:golang/exp.git
git clone git@github.com:golang/crypto.git
git clone git@github.com:golang/oauth2.git

经过上述两类处理后,VScode 的 golang 环境就算比较好用了。