VSCode安装GO语言依赖工具

由于vscode对go语言的支持还是hin不错滴,所以我日常学习go都用vscode,但这货有个毛病,各种lint、补全、nav、调试都依赖go语言的其他扩展工具,如果安装补全,会给出类似提示:

The "gocode" command is not available. Use "go get -v github.com/mdempsky/gocode" to install.

但如果按照vscode的提示点击“安装”后,经过漫长等待,会迎来进一步提示:

gocode:
Error: Command failed: /usr/local/go/bin/go get -u -v github.com/mdempsky/gocode
github.com/mdempsky/gocode (download)
Fetching https://golang.org/x/tools/go/gcexportdata?go-get=1
https fetch failed: Get https://golang.org/x/tools/go/gcexportdata?go-get=1: dial tcp 216.239.37.1:443: i/o timeout
package golang.org/x/tools/go/gcexportdata: unrecognized import path "golang.org/x/tools/go/gcexportdata" (https fetch: Get https://golang.org/x/tools/go/gcexportdata?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

What's the fuuuuuuu!!!

必须说明我是在科学上网的前提下执行的安装命令,所以猜测不是网络问题,具体原因没深究,我参考了官方指导以及一篇博文解决的该问题,博客写得有点绕,我挑简单的总结一下。

解决方案

从官方文档中可以明确,VSCode依赖的几款工具完成不同功能:

名称 描述 链接
gocode 代码自动补全 https://github.com/mdempsky/gocode
go-outline 在当前文件中查找 https://github.com/ramya-rao-a/go-outline
go-symbols 在项目路径下查找 https://github.com/acroca/go-symbols
gopkgs 自动补全未导入包 https://github.com/uudashr/gopkgs
guru 查询所有引用 https://golang.org/x/tools/cmd/guru
gorename 重命名符号 https://golang.org/x/tools/cmd/gorename
goreturns 格式化代码 https://github.com/sqs/goreturns
godef 跳转到声明 https://github.com/rogpeppe/godef
godoc 鼠标悬浮时文档提示 https://golang.org/x/tools/cmd/godoc
golint 就是lint https://golang.org/x/lint/golint
dlv 调试功能 https://github.com/derekparker/delve/tree/master/cmd/dlv
gomodifytags 修改结构体标签 https://github.com/fatih/gomodifytags
goplay 运行当前go文件 https://github.com/haya14busa/goplay/
impl 新建接口 https://github.com/josharian/impl
gotype-live 类型诊断 https://github.com/tylerb/gotype-live
gotests 单元测试 https://github.com/cweill/gotests/
go-langserver 语言服务 https://github.com/sourcegraph/go-langserver
filstruct 结构体成员默认值 https://github.com/davidrjenni/reftools/tree/master/cmd/fillstruct

以上的工具可以有选择地安装,但为了开发过程中不要出什么岔子,我一般选择全部安装,很不幸的是安装过程中80%的工具会出现timeout的提示。

安装步骤

为了统一每个人的开发环境,下文中GOPATH表示自己电脑go的安装路径,例如我的电脑默认安装路径为~/go,如果没有的话建议先执行命令export GOPATH=~/go,Windows用户...👋

  1. 创建目录$GOPATH/src/golang.org/x,并切换到该目录
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
  1. 克隆golang.org工具源码
    如果不克隆的话,go get -u -v golang.org/xxx肯定是timeout的,所以只能先把它们下载到本地src/golang.org/x/tools
git clone https://github.com/golang/tools.git
git clone https://github.com/golang/lint.git
  1. 下载github源码
    按照go get -u -v命令,从GitHub上下载代码后还会fetch,我们很可能会在fetch https://golang.org/xxx的时候挂掉,原因你懂的。所以去掉-u选项,禁止从网络更新现有代码。
# 先从github下载依赖工具的源码,fetch提示timeout不要管
go get -v github.com/ramya-rao-a/go-outline
go get -v github.com/acroca/go-symbols
go get -v github.com/mdempsky/gocode
go get -v github.com/rogpeppe/godef
go get -v github.com/zmb3/gogetdoc
go get -v github.com/fatih/gomodifytags
go get -v sourcegraph.com/sqs/goreturns
go get -v github.com/cweill/gotests/...
go get -v github.com/josharian/impl
go get -v github.com/haya14busa/goplay/cmd/goplay
go get -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -v github.com/davidrjenni/reftools/cmd/fillstruct
go get -v github.com/alecthomas/gometalinter
  1. 安装工具
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install github.com/mdempsky/gocode
go install github.com/rogpeppe/godef
go install github.com/zmb3/gogetdoc
go install github.com/fatih/gomodifytags
go install sourcegraph.com/sqs/goreturns
go install github.com/cweill/gotests/...
go install github.com/josharian/impl
go install github.com/haya14busa/goplay/cmd/goplay
go install github.com/uudashr/gopkgs/cmd/gopkgs
go install github.com/davidrjenni/reftools/cmd/fillstruct
go install github.com/alecthomas/gometalinter
$GOPATH/bin/gometalinter --install
go install golang.org/x/tools/cmd/godoc
go install golang.org/x/lint/golint
go install golang.org/x/tools/cmd/gorename
go install golang.org/x/tools/cmd/goimports
go install golang.org/x/tools/cmd/guru
  1. 集成到系统环境中
    由于我是在用户目录下临时安装的,真正的GO环境是/usr/local/go,所以最后一步无比注意,把~/go/bin下面生成的所有执行文件拷贝到系统环境中
sudo cp -af $GOPATH/bin/* /usr/local/go/bin/

打完收工!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容