【编者的话】正所谓“磨刀不误砍柴工”,本文将介绍几个阅读源码所要用到的神兵利器。其中,LiteIDE是国人开发的专为Go语言而生的集成开发环境(IDE),它可以用以简洁和美观著称的Sublime Text 2编辑器进行源码阅读。当然,作为一代Geek,我们还可以选择使用长盛不衰的Vim和Emacs。相信通过本节的阅读,一定能让读者在阅读源码时更加得心应手。
阅读Go源码之前,安装Go语言的开发环境是必不可少的。下面我们介绍下载和安装的步骤。
请根据操作系统的版本(FreeBSD、Linux、Mac OS X或者Windows)以及处理器的架构(386、amd64或者arm)进行选择。下载地址为: https://golang.org/dl/ ,是Google提供的服务,可能需要使用VPN才能访问。
选择合适的版本下载完成后,就可以开始进行Go语言安装包的安装了,过程如下。
对于FreeBSD、Linux以及Mac OS X用户来说,下载好的tar压缩文件需要再执行以下步骤才算是安装完成。
把压缩包解压至/usr/local目录下,命令如下:
tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz
选择适合的压缩包进行安装,例如,如果在64位Linux系统上安装Go 1.2.1版本,那么对应的压缩包就是go1.2.1.linux-amd64.tar.gz。
把/usr/local/go/bin添加到系统的环境变量中,可以通过把下面这行命令加入到/etc/profile(系统所有用户都受影响)或者$HOME/.profile(当前用户受影响)文件中来完成。
export PATH=$PATH:/usr/local/go/bin
提示:Go的安装环境默认安装在/usr/local(Windows系统是C:/)路径下。如果指定某个本地目录为安装路径,就必须设置$GOROOT环境变量。如果要把安装包解压至$HOME目录下,就需要把下面两行代码加入到$HOME/.profile文件中。
export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin
下载后缀为.pkg的相关安装包,打开后按照图形界面的指引操作即可顺利安装。使用这种方法时,安装包默认会安装到/usr/local目录下,/usr/local/go/bin也会被加入到环境变量。安装完成后,在终端使用时需要重新开启一个会话,以便生效。
除了源码安装以外,Go官方给用户提供了两种安装开发环境的方法:一种是手动解压缩Zip包安装,这需要设置环境变量;另一种是全自动安装。
MSI安装: 打开MSI文件,按照指引界面一步步操作即可,默认安装在C:/Go路径下。安装器会自动把C:/Go/bin目录加入到环境变量中。同样,需要重启命令行使之生效。
Zip安装: 把Zip文件下载并解压缩到自己选择的目录,推荐C:/Go。如果放到C:/Go以外的目录,需要设置GOROOT变量。然后把解压缩后Go目录下的bin目录(如C:/Go/bin)加入到PATH环境变量中。
Windows下设置环境变量: 在Windows系统下,可以通过“计算机”→“系统属性”→“高级”→“PATH”来设置环境变量。
完成以上步骤后,Go语言环境便安装完成了,最后我们来测试一下。
首先,创建一个hellow.go的空白文件,输入以下代码:
package main
import "fmt"
func main() {
fmt.Printf("hello, world/n")
}
然后通过Go语言工具编译运行,示例如下:
$ go run hello.go
hello, world
如果看到了hello world,那么一切便大功告成了。
遗憾的是,Google官方并没有开发出一款专门为Golang打造的IDE,但开源社区为此作出了巨大的贡献。本节将介绍几种常见的IDE与编辑器的配置和使用技巧。
LiteIDE是国人开发的一款专门为Go语言量身定做的IDE,它简单实用、开源并且可跨平台。
LiteIDE的安装文件托管在sourceforge平台上,因为项目是开源的,我们也可以在GitHub上下载项目源代码进行安装。下载地址为: http://sourceforge.net/projects/liteide/files 。
打开下载目录,如图1所示,会看到各个版本的下载目录,推荐下载最新的版本。有了Go开发环境的安装经验,安装LiteIDE就会简单很多。
图1 LiteIDE下载列表
下载相应版本的LiteIDE后进行解压缩。不同操作系统的用户,LiteIDE对应的安装方法如下:
LiteIDE支持以下Go语言阅读功能。
LiteIDE使用的图标是太极两仪的样式,有着浓浓的中国风,打开它就会看到介绍。可以使用打开文件夹功能,直接打开Docker源代码文件夹。如图2所示,在左边可以看到文件浏览目录、类试图、文件夹列表、大纲以及包浏览器这几个功能;右边是打开的Docker官方的README.md文件,可以看到LiteIDE支持预览Markdown格式,这样可以在这个IDE上面方便地读文档。
图2 LiteIDE功能界面展示
打开IDE以后,大家可以在设置中查看和修改快捷键设置,如图3所示。
图3 LiteIDE快捷键设置
需要注意的是,LiteIDE的代码跳转依旧不够完善,只有当跳转到的代码所在的文件处于打开(已经浏览过)状态时,才能正确地跳转。
Linux或者Mac OS X用户可以配合grep命令进行查看。如果我们要查找的函数是get_instance,则命令如下:
grep -rl get_instance docker/api
grep -rl [grep_pattern] [file_diretory]
Windows用户可以在文件中使用查找功能。
相信现在你已经能使用LiteIDE比较方便地阅读源码了。
Sublime Text 2(简称ST2)自2012年发布以来,便以其简洁华丽的外观、多平台的支持、多语言支持以及超强的可扩展性而风靡起来。同样,作为一款文本编辑器,与VIM相比,它自带有目录树等功能,省去了一些配置上的麻烦,易于上手。
打开Sublime Text的官方网站,页面下方映入眼帘的就是一个大大的Download图标,它会根据操作系统的平台自动选择适合的版本,只需直接点击Download即可下载。当然我们也可以打开下载列表页面( http://www.sublimetext.com/2 ),根据平台选择合适的版本进行下载。
不同系统的用户可以参照不同的方式下载安装Sublime Text 2,方法如下:
以上配置完成后,我们便可以方便地在终端通过subl命令打开Sublime Text 2了。
Package Control
GoSublime
CTags
至此,Sublime的介绍就完成了,熟练运用以上3个插件,不仅便于阅读Docker源码,对于Go语言项目的编写也会有非常大的帮助。
相信习惯使用文本编辑器的读者,一定对开源软件Vim相当熟悉和亲切。Vim被誉为“编辑器之神”,学习曲线极为陡峭,但是,一旦熟练掌握了Vim自成体系的一套快捷键,代码编辑速度将快速提升,你也会从此对Vim爱不释手。本节只作为对Vim老用户的抛砖引玉,不适于Vim的初学者使用。
go-vim是一款让Vim可以高度支持Go语言的Vim插件,所以也是要使用Vim作为Go IDE的必装插件。
如果使用pathogen对插件进行管理,那么只要执行如下步骤即可。
cd ~/.vim/bundle
git clone https://github.com/fatih/vim-go.git
对于Vundle用户,需要在.vimrc文件中加入下面这行:
Plugin 'fatih/vim-go'
并且打开Vim,在命令模式下执行:PluginInstall①)。
安装完插件后,为确保所有依赖的二进制文件(如gocode、godef、 goimports等),可以在命令模式下执行如下命令进行自动安装:
:GoInstallBinaries
除go-vim外,还有如下可选插件。
关于Vim的介绍到此结束,但相信对于Vim老用户来说,探索才刚刚开始。Vim作为一个经久不衰、广受赞誉的好工具,一直都是每一个Geek心中最好的神兵利器!
Emacs作为与Vim齐名的文本编辑器,号称“神之编辑器”,用来浏览和编写Go代码也是非常方便的。本节也只作为Emacs老用户的抛砖引玉,在此之前,用户需要做好适合自己的配置。下面我们就以Emacs24为例,简单介绍几个实用的插件,用户需要先使用go get命令安装好gofmt、godef、godoc、gocode等工具。
go-mode在提供了自动缩进和语法高亮功能的基础上,还整合了Go语言自带的工具,如gofmt、godoc、godef等。在Emacs24以后的版本中,可以使用自带的Package工具进行安装,命令如下:M-x package-install go-mode下面我们主要介绍格式整理以及定义跳转两项功能的配置。
格式整理功能直接调用了gofmt工具,该工具能使用户的代码风格与其他开发人员保持一致。在Emacs中,用户可以直接调用gofmt命令,对当前窗口的代码进行格式整理。另一种方式是为before-save-hook添加函数,示例如下:
(add-hook 'before-save-hook 'gofmt-before-save)
这样在用户每次存档时就会自动进行格式整理。
定义跳转使用了godef工具,该工具能分析用户的代码、其他包内的代码以及Go标准库,实现在这三者间的定义跳转。Emacs提供了godef-jump命令实现跳转,默认绑定键为C-c C-j,用户也可以自己定义按键绑定,如绑定到F3键:
(add-hook 'go-mode-hook
'(lambda () (local-set-key (kbd "<f3>") 'godef-jump)))
为了在跳转之后能跳转回来,用户可以添加如下配置,这样可以使用F2键回到原先的位置。
(add-hook 'go-mode-hook
'(lambda () (local-set-key (kbd "<f2>") 'pop-tag-mark)))
此外,go-mode还提供了管理imports、使用godoc等工具,这里不再一一赘述。
company-go调用gocode工具提供自动完成功能,用户可以直接使用Package工具安装company-mode和company-go,并进行如下配置:
(add-hook 'go-mode-hook 'company-mode)
(add-hook 'go-mode-hook
(lambda ()
(set (make-local-variable 'company-backends) '(company-go))
(company-mode)))
Emacs还为用户提供了极大的自由度,建议用户使用最新版本的Emacs和插件,善用Package功能和网上贡献的工具,这样能获得最新的功能和更好的体验。
本文节选自《 Docker——容器与容器云 》,作者:张磊、孙健波。