内容简介:最近在学习 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 镜像
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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》 这本书的介绍吧!