内容简介:最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了。虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端程序员来说,着实是一大开发利器。之前也用过 sublime, notepad++ 等轻量级编辑器,但是自从用过了 vs code 以后,就再也用不回去了。着实有种“曾经沧海难为水,除却巫山不是云”的感觉。
前言
最近在学习 go 语言,当然编辑器用的还是最熟悉的 vs code 了。
虽然说 vs code 着实很占内存,但是没办法,谁让他配置起来方便快捷,并且对于前端 程序员 来说,着实是一大开发利器。
之前也用过 sublime, notepad++ 等轻量级编辑器,但是自从用过了 vs code 以后,就再也用不回去了。着实有种“曾经沧海难为水,除却巫山不是云”的感觉。
写前端代码写习惯了,装个插件也是方便的狠,直接搜一下,然后点击安装,装好以后重启一下编辑器就能愉快的使用了。
但是这套经验对于我这个 go 的新手来说,却不是那么的适用了。
打开插件扩展,搜与 go 有关的插件,排在第一个的就是微软官方出品的 go 插件。
当时一想,我就乐了,既然编辑器用的都是人家开源的产品,那么人家定制的 go 插件也没有理由不用了吧。
这一用不要紧,却让我后面折腾了好久,才搞明白,原来人家这插件是给你装上了个全家桶啊。
不断地报错
我天真的以为,装了这个插件以后,直接就能用了,哪曾想到,我 shift + alt + F
格式化代码的时候,就会蹦出下面类似的提醒:
于是我就只能点个 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,完全丧失掉了一枚程序员应当具有的沉着冷静的风范。
我开始用搜索引擎寻找答案,发现找到的都是一些同类型的文章,而且大家的答案居然出奇的一致,就类似下面这样:
- 之所以会出现这个原因,是因为 google 的相关网站被和谐掉了,因为下载不了相关工具
- 跟我一起来吧,让我手摸手教你该怎么完美解决这个问题。咳咳,这里请自行脑部一下老司机的音容。
- 克隆 tools 这个 github 项目
- 在个人的文件夹内的 go 路径中创建一份诸如
C:\Users\root\go\src\golang.org\x\tools
这种路径的文件目录( 博主按:这个步骤没错,但是不知道是出于疏忽还是疏忽,居然没有一篇文章告诉你为什么要这么做 ) - 把克隆下来的 tools 文件夹覆盖路径中的同名文件夹
- cd 到
C:\Users\root\go\bin
目录,开始执行一大串命令行命令
大多数文章,差不多到这里就戛然而止了。
我照着文章反复的执行了好多次,每一次都前功尽弃了。因为每每总是 fail 掉了,还是有一堆插件没装上。
就在我开始气妥的时候,胜利的曙光终于来临了,命运女神开始眷顾我了。
我鬼使神差的看了一眼 C:\Users\root\go\bin
目录中的文件:
这一看,简直让我大跌眼镜,我终于明白了这个 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 页面:
看到这里,我想聪明的你不难明白,原来我们装的插件就是 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 项目:
不看不觉得,一看我就觉得要吐血了,这位 sqs 用户,对我们中国的开发者“太不友好了”,整个项目其实很小,源代码就几十 kb,但是 sqs 居然朝里面塞了一个接近 6.5Mb 的 screencast.gif 文件。
然而,打开一看,也就是一个十秒左右的演示代码使用的录屏。这老哥(或老姐)不知道用的什么录制 gif 的软件,录屏的效率惊掉人的下巴了。
这也间接的“坑了”我们国内的开发者了,以我们克隆 github 项目的平均网速来看,本来十秒钟能克隆下来的项目,这下好了,十分钟也克隆不下来了。
执行了 go bulid 以后,我们的文件夹下就多了一个二进制文件 goreturns.exe 了
接下来要做的就是,将二进制文件 复制 或 剪切 到我们的 $GOPATH\bin
目录下就大功告成了。
直接在 $GOPATH\bin 目录下编译
在 $GOPATH\bin
目录下,直接执行命令 go install github.com/sqs/goreturns
命令,go 编译程序就会自动的到 $GOPATH\src
目录下,找到对应的 goreturns 包,对其进行编译,编译后得到的二进制文件就在当前所在的 bin 目录下了。
后记
本来是一件很简单很容易理解的事情,但是就是很难找到合适的直指核心本质的教程。
不得不感叹,互联网虽然资料很多,信息繁杂,但是真正想找到对你有用的资料,却如同大海捞针。
不要浮躁,多想多实践,共勉吧!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- elasticsearch head插件安装
- vscode安装go插件
- PyCharm安装MicroPython插件
- Jenkins 自动化安装插件
- Intellij IDEA安装golang插件
- Vagrant 使用国内镜像安装插件和 box 镜像
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。