在 vs code 中使用 go 插件时相关工具的正确安装方式

栏目: Go · 发布时间: 6年前

内容简介:最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了。虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端程序员来说,着实是一大开发利器。之前也用过 sublime, notepad++ 等轻量级编辑器,但是自从用过了 vs code 以后,就再也用不回去了。着实有种“曾经沧海难为水,除却巫山不是云”的感觉。

前言

最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了。

虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端 程序员 来说,着实是一大开发利器。

之前也用过 sublime, notepad++ 等轻量级编辑器,但是自从用过了 vs code 以后,就再也用不回去了。着实有种“曾经沧海难为水,除却巫山不是云”的感觉。

写前端代码写习惯了,装个插件也是方便的狠,直接搜一下,然后点击安装,装好以后重启一下编辑器就能愉快的使用了。

但是这套经验对于我这个 go 的新手来说,却不是那么的适用了。

打开插件扩展,搜与 go 有关的插件,排在第一个的就是微软官方出品的 go 插件。

在 vs code 中使用 go 插件时相关 <a href='https://www.codercto.com/tool.html'>工具</a> 的正确安装方式

当时一想,我就乐了,既然编辑器用的都是人家开源的产品,那么人家定制的 go 插件也没有理由不用了吧。

这一用不要紧,却让我后面折腾了好久,才搞明白,原来人家这插件是给你装上了个全家桶啊。

不断地报错

我天真的以为,装了这个插件以后,直接就能用了,哪曾想到,我 shift + alt + F 格式化代码的时候,就会蹦出下面类似的提醒: 在 vs code 中使用 go 插件时相关工具的正确安装方式

于是我就只能点个 Install All 了,却没想到每次 go 这个插件总是不断地提示安装失败了,大概就是输出下面这样的提示信息:

Installing github.com/derekparker/delve/cmd/dlv FAILED
Installing github.com/stamblerre/gocode FAILED
Installing github.com/ianthehat/godef FAILED
Installing github.com/sqs/goreturns FAILED

当然我这里就只是截取了小部分,因为我已经装好了,也懒得卸载了再演示了。

盲目的搜寻

开始我很盲目,没有冷静下来分析一下为什么会出现这个原因。现在想来,当时确实很 naive,完全丧失掉了一枚程序员应当具有的沉着冷静的风范。

我开始用搜索引擎寻找答案,发现找到的都是一些同类型的文章,而且大家的答案居然出奇的一致,就类似下面这样:

  1. 之所以会出现这个原因,是因为 google 的相关网站被和谐掉了,因为下载不了相关工具
  2. 跟我一起来吧,让我手摸手教你该怎么完美解决这个问题。咳咳,这里请自行脑部一下老司机的音容。
  3. 克隆 tools 这个 github 项目
  4. 在个人的文件夹内的 go 路径中创建一份诸如 C:\Users\root\go\src\golang.org\x\tools 这种路径的文件目录( 博主按:这个步骤没错,但是不知道是出于疏忽还是疏忽,居然没有一篇文章告诉你为什么要这么做
  5. 把克隆下来的 tools 文件夹覆盖路径中的同名文件夹
  6. cd 到 C:\Users\root\go\bin 目录,开始执行一大串命令行命令

大多数文章,差不多到这里就戛然而止了。

我照着文章反复的执行了好多次,每一次都前功尽弃了。因为每每总是 fail 掉了,还是有一堆插件没装上。

就在我开始气妥的时候,胜利的曙光终于来临了,命运女神开始眷顾我了。

我鬼使神差的看了一眼 C:\Users\root\go\bin 目录中的文件: 在 vs code 中使用 go 插件时相关工具的正确安装方式

这一看,简直让我大跌眼镜,我终于明白了这个 vs code 中 go 这个插件到底干了啥,也明白了怎么才能正确的装上 go 插件调用的程序了。

阐述原理

原来 vs code 中的 go 插件,就是在 go 的环境变量中调用一些程序,来对 go 的源码执行一些检查、测试、格式化、重命名、代码检查等操作。

go 的 env

通过 go env 查看 go 的系统配置参数:

C:\Users\root>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\root\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=C:\Users\root\go
set GOPROXY=
set GORACE=
set GOROOT=D:\Software\go
set GOTMPDIR=
set GOTOOLDIR=D:\Software\go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\root\AppData\Local\Temp\go-build998644522=/tmp/go-build -gno-record-gcc-switches

我们定位到 set GOPATH=C:\Users\root\go 这一行,不难发现,我们的 go 程序的系统路径在什么地方。

通俗点来讲,我们在 go 程序中经常会使用一些第三方的包,例如:

import (
	"golang.org/x/tour/tree"
	"fmt"
)

我们编译我们的 go 程序的时候,就是从这个 gopath 下面的 src 文件夹中寻找我们的第三方包的。

换句话就是说,我们可以编写一些自己的 go 扩展包,放在这里文件夹里,然后就可以直接全局引用了。

go 插件的使用揭秘

虽然我没有看过 vs code 的 go 插件的源码,但是现在我刚大胆的说,我已经了解 go 插件的使用哲学了。

它其实并没有写具体的工具(这是我的猜想),对 go 的源码进行解析,而是调用 go 的一些优秀插件,对 go 源码执行一些操作。

也就是说,除了 go 官方自带的那些 格式化 等等插件以外,它会在 gopath 的 bin 目录下寻找对应的工具,对 go 源码执行操作。

如果这个工具没找到,每次就会不厌其烦的提醒你,你没有安装对应的工具,然后弹出提示框,问你要不要安装。

安装的时候,也是从对应的 go 工具的 github 网站或 golang 官网下载。下下来以后放在 src 文件夹内,然后通过 go install 包名 安装到 bin 目录下,供下次调用的时候使用。

因此,对于下载不下来的插件,我们可以手动的在 github 或 golang 网站找到对应的工具包,放在对应的目录中,然后对工具包进行编译,将编译后的二进制文件放在 bin 目录下即可。

安装范例

下面我就以安装 goturns 这个插件为例,介绍一下怎么手动安装这些老是安装不成功的插件。

克隆对应的项目到本地

Installing github.com/sqs/goreturns FAILED 这条提示信息我们可以看出来,这个插件所在的网址是多少。

我们打开我们的浏览器,在地址栏输入 github.com/sqs/goreturns ,然后回车,就进入了插件的 github 页面: 在 vs code 中使用 go 插件时相关工具的正确安装方式

看到这里,我想聪明的你不难明白,原来我们装的插件就是 github 上开源的 go 插件,而 sqs 是用户, goreturns 是项目名称。

我们为了尊重插件的开发者,直接就按照 github 的页面编排的目录,直接把我们的项目克隆到 $GOPATH\src\github.com\sqs\goreturns 文件夹之中。

所以我们就在 $GOPATH\src\github.com\ 目录下,新建一个文件夹为 sqs 我想用过类 Unix 系统的用户都应该明白了,我们相当于建了一个 sqs 用户的个人文件夹,里面可以放他个人的项目,而这个用户本来是 github.com 的用户。

打开我们的控制台,在 $GOPATH\src\github.com\sqs\ 路径下,执行 git clone git@github.com:sqs/goreturns.git 命令,将项目克隆到我们本地。

以下是在我电脑上执行的过程,可以看出来下载网速较慢,因此花了很长时间:

C:\Users\root\go\src\github.com\sqs>git clone git@github.com:sqs/goreturns.git
Cloning into 'goreturns'...
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 152 (delta 3), reused 6 (delta 3), pack-reused 144
Receiving objects: 100% (152/152), 6.85 MiB | 5.00 KiB/s, done.
Resolving deltas: 100% (79/79), done.

这里不得不吐槽一下的是,不同电信运营商,对国外网站的支持程度也迥然不同。

我在公司克隆 github 项目,非常的快,但是在家里就慢的出奇。我在公司根本打不开 coursera , 但是在家里却有不错的速度。

编译成二进制文件

完全的将项目克隆下来了以后,接下来要做的就是将项目编译成对应的二进制文件。

其他插件安装的原理也是一样的,安装的过程也是大同小异,学会了下面这个范例,就能举一反三了。

编译好后移到 $GOPATH\bin 目录下

了解 go 的你,应该明白 go 源文件是怎么编译的吧。

我们仅仅只需要,在对应的项目路径下,执行 go install 命令,就能自动找对应的同名入口文件开始编译。

看看我们的 goreturns 项目: 在 vs code 中使用 go 插件时相关工具的正确安装方式

不看不觉得,一看我就觉得要吐血了,这位 sqs 用户,对我们中国的开发者“太不友好了”,整个项目其实很小,源代码就几十 kb,但是 sqs 居然朝里面塞了一个接近 6.5Mb 的 screencast.gif 文件。

然而,打开一看,也就是一个十秒左右的演示代码使用的录屏。这老哥(或老姐)不知道用的什么录制 gif 的软件,录屏的效率惊掉人的下巴了。

这也间接的“坑了”我们国内的开发者了,以我们克隆 github 项目的平均网速来看,本来十秒钟能克隆下来的项目,这下好了,十分钟也克隆不下来了。

执行了 go bulid 以后,我们的文件夹下就多了一个二进制文件 goreturns.exe 了 在 vs code 中使用 go 插件时相关工具的正确安装方式

接下来要做的就是,将二进制文件 复制剪切 到我们的 $GOPATH\bin 目录下就大功告成了。

直接在 $GOPATH\bin 目录下编译

$GOPATH\bin 目录下,直接执行命令 go install github.com/sqs/goreturns 命令,go 编译程序就会自动的到 $GOPATH\src 目录下,找到对应的 goreturns 包,对其进行编译,编译后得到的二进制文件就在当前所在的 bin 目录下了。

后记

本来是一件很简单很容易理解的事情,但是就是很难找到合适的直指核心本质的教程。

不得不感叹,互联网虽然资料很多,信息繁杂,但是真正想找到对你有用的资料,却如同大海捞针。

不要浮躁,多想多实践,共勉吧!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Pattern Recognition and Machine Learning

Pattern Recognition and Machine Learning

Christopher Bishop / Springer / 2007-10-1 / USD 94.95

The dramatic growth in practical applications for machine learning over the last ten years has been accompanied by many important developments in the underlying algorithms and techniques. For example,......一起来看看 《Pattern Recognition and Machine Learning》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

MD5 加密
MD5 加密

MD5 加密工具