使用什么源代码阅读工具具看go代码

Go入门:怎样编写Go代码
本文将描述如何开发一个简单的go包,并简单介绍,以及获取、生成、安装go包和命令的标准方法。
将所有Go代码放在一个工作空间(workspace)下。
一个工作空间包含多个代码仓库。
每个仓库有一个或多个包(packages)。
每个包又包含一个或多个Go代码源文件。
包的路径在import中体现。
工作空间(workspace)
每个工作空间根目录下包括:
- src Go源代码
- src文件夹下放置多个版本控制的仓库(项目)。
- pkg 包对象
- bin 生成的可执行文件
go命令编译源文件,并生产对应的结果文件到pkg和bin目录。
一个典型的go工作空间是这样子的:
上边的例子包括两个仓库、项目(example和image)。其中项目example包括两个命令(hello和outyet)和一个二进制库(stringutil);项目image包含bmp包和。
一个典型的go工作空间包括多个代码库(由包和命令组成)。大多数程序员会把所有源代码和依赖放到一个工作空间。
各种不同的代码包编译生成命令和类库。这个我们以后单独讨论。
GOPATH环境变量
GOPATH环境变量又来标明你的工作空间的位置。大多数情况下也是开发Go代码唯一要设置的一个环境变量。
开始所有工作之前,你需要创建一个总的目录来当做工作空间,并且设置GOPATH变量指向这个目录。工作空间可以在任何目录下,在接下来的文档中我们使用home目录下的work目录HOME/work来做例子。(一般也会直接把个人home目录HOME设为工作空间)
注意:工作目录不能跟Go的安装目录一样。
$ mkdir $HOME/work
$ export GOPATH=$HOME/work
方便起见,也会直接把工作空间下的bin目录添加到PATH路径(这样就可以在任意目录下直接执行生成的Go命令)。
$ export PATH=$PATH:$GOPATH/bin
点击获取更多关于GOPAT环境变量的设置帮助。
包路径用来唯一标记一个包,包路径反映了包在本地工作空间或远程代码库(接下来会详细说明)中的位置。
标准库中的包直接使用短包路径,比如“fmp”或“net/http”。但是对于自己编写的包,基础路径的名字不能与标准库和其它一些外部库冲突。
如果你的代码直接保存在一些版本控制的代码库里,应该直接使用代码库的根目录作为基本路径。比如,如果你的代码都存放在github的user用户下(/user),那/user就应该是基本路径。
即使你现在还没有打算把代码发布带远程代码仓库,最好还是按照以后准备提交代码仓库的方式组织代码结构。实际中可以使用任何组合来标记路径名称,只要对应的路径名称不与基本库冲突。
我们接下来将使用/user作为基本路径。在工作空间下创建对应的目录来保存代码:
$ mkdir -p $GOPATH//user
第一个Go程序
为了编译和运行一个简单的Go程序,需要在工作空间下创建包路径(我们接下来将使用/user/hello)和对应的包目录。
$ mkdir $GOPATH//user/hello
接下来,在目录下新建一个hello.go文件,包含以下内容:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
现在可以使用下边的go工具生成和安装这个程序:
$ go /user/hello
你可以在任何目录下执行上边的命令。go工具会根据GOPATH在对应工作空间下查找/user/hello包。
你也可以忽略包路径而直接在对应代码包文件夹下执行go install命令:
$ cd $GOPATH//user/hello
$ go install
以上命令会生成hello命令,同时产生可执行二进制文件。然后将对应的二进制命令安装到工作空间的bin目录下。在我们的这个例子中,会直接安装到GOPATH/bin/hello,也就是HOME/work/bin/hello。
go命令执行成功时不会有任何输出,只有发生错误的时候才会打印对应的错误信息。
现在你可以在命令行中使用完整路径来执行这个程序:
$ $GOPATH/bin/hello
Hello, world.
或者,如果已经添加$GOPATH/bin到PATH,可以直接输入二进制名称来执行程序:
Hello, world.
如果你正要使用版本控制系统,现在可以初始化代码仓库、添加文件,做第一次提交。再次强调,使用版本控制系统不是必须的。
$ cd $GOPATH//user/hello
$ git init
Initialized empty Git repository in /home/user/work//user/hello/.git/
$ git add hello.go
$ git commit -m "initial commit"
[master (root-commit) 0b4507d] initial commit
1 file changed, 1 insertion(+)
create mode 100644 hello.go
接下来我们来写一个库给hello程序使用。
跟可执行程序一样,第一步还是创建包路径和对应的包文件夹。
$ mkdir $GOPATH//user/stringutil
然后在包文件夹下新建reverse.go文件,内容如下:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i & len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
return string(r)
使用go build编译整个包:
$ go /user/stringutil
或者在包目录下直接执行go build:
$ go build
到这里还不会产生任何文件。你必须执行go insall命令生成输出库文件。
确认库文件已经产生后,就可以在之前的hello.go中使用这个库了:
package main
"/user/stringutil"
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
无论使用go安装包还是二进制文件,所有相关的依赖都会自动安装。所以当你安装hello程序时:
$ go /user/hello
对应的stringutil包也会自动被安装。
执行新的hello程序,你可以看到一个新的、已经被反转的消息:
Hello, Go!
所有这些以后,你的工作空间应该是这样的:
# command executable
linux_amd64/
# this will reflect your OS and architecture
stringutil.a
# package object
# command source
stringutil/
reverse.go
# package source
注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样)。这样可以go命令可以直接找到对应的包对象,避免不必要的重复编译。linux_amd64是为了根据操作系统和你的系统架构交叉编译。
所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)。
所有Go源代码都以下边的语句开始:
package name
其中name就是包引用是默认的名称。一个包中的所有文件必须使用同一个包名。
可执行命令的包名必须是main。
一个二进制文件下所有的包名不需要唯一,但是引用路径必须唯一。
了解更多关于Go的命名规范,可以参考。
Go自带了一个轻量级的测试框架,由go test命令和testing包组成。
你可以通过新建xx_test.go写一个测试,其中包含若干个TestXXX函数。测试框架会自动执行这些函数;如果函数中包含tError或t.Fail, 对应的测试会被判为失败。
添加一个针对stringutil的测试文件$GOPATH//user/stringutil/reverse_test.go,包含以下内容:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
然后通过go test执行测试:
$ go /user/stringutil
/user/stringutil 0.165s
同样,在包文件夹下可以忽略包路径而直接执行go test命令:
/user/stringutil 0.165s
包的引用路径用来描述如何通过版本控制系统获取包的源代码。go工具通过引用路径自动从远程代码仓库获取包文件。比如本文中用的例子也对应的保存在/golang/example下。go可以通过包的代码仓库的url直接获取、生成、安装对应的包。
$ go /golang/example/hello
$ $GOPATH/bin/hello
Hello, Go examples!
如果工作空间中不存在对应的包,go会将对应的包放到GOPATH环境变量指明的工作空间下。(如果包已经存在,go跳过代码拉去而直接执行go install)。
执行上边的go get命令后,工作空间文件夹下是这样的结果:
# command executable
linux_amd64/
/golang/example/
stringutil.a
# package object
stringutil.a
# package object
/golang/example/
# Git repository metadata
# command source
stringutil/
reverse.go
# package source
reverse_test.go
# test source
# command source
stringutil/
reverse.go
# package source
reverse_test.go
# test source
github上的hello命令依赖于同个仓库下的stringutil库。hello.go使用同样的路径进行导入,所以go get命令能够直接找到并安装对应的依赖包。
import "/golang/example/stringutil"
这也是你共享Go包的最好方式。
关于go工具远程包的更多信息,可以参考。
接下来的事情
你可以订阅收取Go新版本的发布信息通知。
阅读来学习如何编写清晰、优雅的Go代码。
到学习Go编程语言。
访问深入了解Go以及基本库和工具。
到这里就结束了,参考原文.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:199397次
积分:2601
积分:2601
排名:第10213名
原创:50篇
转载:19篇
评论:59条
(1)(1)(1)(3)(1)(2)(1)(3)(1)(2)(2)(1)(1)(2)(4)(12)(7)(7)(10)(2)(9)阅读Docker源代码的神兵利器
【编者的话】正所谓“磨刀不误砍柴工”,本文将介绍几个阅读源码所要用到的神兵利器。其中,LiteIDE是国人开发的专为Go语言而生的集成开发环境(IDE),它可以用以简洁和美观著称的Sublime Text 2编辑器进行源码阅读。当然,作为一代Geek,我们还可以选择使用长盛不衰的Vim和Emacs。相信通过本节的阅读,一定能让读者在阅读源码时更加得心应手。
Golang开发环境的安装
阅读Go源码之前,安装Go语言的开发环境是必不可少的。下面我们介绍下载和安装的步骤。
1. 下载官方的Go语言安装包
请根据操作系统的版本(FreeBSD、Linux、Mac OS X或者Windows)以及处理器的架构(386、amd64或者arm)进行选择。下载地址为: https://golang.org/dl/ ,是Google提供的服务,可能需要使用VPN才能访问。
2. 安装Go语言安装包
选择合适的版本下载完成后,就可以开始进行Go语言安装包的安装了,过程如下。
FreeBSD、Linux以及Mac OS X之tar安装
对于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
Mac OS X之pkg快速安装
下载后缀为.pkg的相关安装包,打开后按照图形界面的指引操作即可顺利安装。使用这种方法时,安装包默认会安装到/usr/local目录下,/usr/local/go/bin也会被加入到环境变量。安装完成后,在终端使用时需要重新开启一个会话,以便生效。
Windows安装
除了源码安装以外,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”来设置环境变量。
3. 测试Go语言环境
完成以上步骤后,Go语言环境便安装完成了,最后我们来测试一下。
首先,创建一个hellow.go的空白文件,输入以下代码:
package mainimport &fmt&func main() {fmt.Printf(&hello, world/n&)}
然后通过Go语言工具编译运行,示例如下:
$ go run hello.gohello, world
如果看到了hello world,那么一切便大功告成了。
工具的配置与技巧
遗憾的是,Google官方并没有开发出一款专门为Golang打造的IDE,但开源社区为此作出了巨大的贡献。本节将介绍几种常见的IDE与编辑器的配置和使用技巧。
1. LiteIDE
LiteIDE是国人开发的一款专门为Go语言量身定做的IDE,它简单实用、开源并且可跨平台。
下载与安装
LiteIDE的安装文件托管在sourceforge平台上,因为项目是开源的,我们也可以在GitHub上下载项目源代码进行安装。下载地址为: http://sourceforge.net/projects/liteide/files 。
打开下载目录,如图1所示,会看到各个版本的下载目录,推荐下载最新的版本。有了Go开发环境的安装经验,安装LiteIDE就会简单很多。
图1 LiteIDE下载列表
下载相应版本的LiteIDE后进行解压缩。不同操作系统的用户,LiteIDE对应的安装方法如下:
Mac OS X:把解压后的LiteIDE.app直接拖动到Application文件夹下,以后即可在Launchpad中方便地找到并打开它。
Windows: 解压缩后,在liteide/bin目录下,双击liteide.exe即可打开运行。
Linux: 解压缩后,在liteide/bin/目录下,双击liteide即可打开运行。
LiteIDE支持Go语言阅读的功能简介
LiteIDE支持以下Go语言阅读功能。
Go语言包浏览器(Package browser)
类视图和大纲(Class view and outline)
文档浏览(Document browser)
Go语言Api函数检索(GOPATH API index)
代码跳转(Jump to Declaration)
代码表达式信息显示(Find Usages)
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/apigrep -rl [grep_pattern] [file_diretory]
Windows用户可以在文件中使用查找功能。
相信现在你已经能使用LiteIDE比较方便地阅读源码了。
2. Sublime Text 2
Sublime Text 2(简称ST2)自2012年发布以来,便以其简洁华丽的外观、多平台的支持、多语言支持以及超强的可扩展性而风靡起来。同样,作为一款文本编辑器,与VIM相比,它自带有目录树等功能,省去了一些配置上的麻烦,易于上手。
打开Sublime Text的官方网站,页面下方映入眼帘的就是一个大大的Download图标,它会根据操作系统的平台自动选择适合的版本,只需直接点击Download即可下载。当然我们也可以打开下载列表页面( /2 ),根据平台选择合适的版本进行下载。
不同系统的用户可以参照不同的方式下载安装Sublime Text 2,方法如下:
Windows:下载后打开exe文件,按照引导界面进行安装即可。
Mac OS X:下载后打开dmg文件,按照引导界面进行安装即可。
Linux: 下载后进行解压缩,解压缩后进入目录点击sublime_text即可使用。但这样不便于使用,可以按照以下步骤进行配置,以便在终端也可方便地使用Sublime(假设已经解压缩到HOME目录)。
{{{mv $HOME/Sublime/ Text/ 2/ /opt/ sudo ln -s /opt/Sublime/ Text/ 2/sublime_text /usr/local/bin/subl}}}
以上配置完成后,我们便可以方便地在终端通过subl命令打开Sublime Text 2了。
Package Control
点击菜单栏偏好设置(Preferences)-&包浏览(Browse Packages)。
打开它的上一级目录Sublime-Text-2/,可以看到“Installed Packages”、“Packages”等文件夹。
下载Control.sublime-package包,并且复制到Installed Packages/目录中。
重启Sublime Text。
安装完Package Control后,默认情况下,通过快捷键Ctrl+Shift+P①即可调出命令执行模块, 输入Package Control:Install Package即可激活包安装。
在跳出的可用包列表中,键入GoSublime后按回车键,即可下载并自动安装。
安装完GoSublime后,即可使用诸如代码补全、格式调整等功能。
与GoSublime相同,通过快捷键Ctrl+Shift+P调出命令执行模块,输入Package Control:Install Package,在跳出的可用包列表中键入CTags,再按回车键即可自动安装。
安装完成后,在Docker项目的根目录下点击鼠标右键,执行CTags:Rebuild Tags,对项目进行CTags检索。
通过快捷键Ctrl+Shift+ . 即可进行代码跳转(跳转到定义),通过快捷键Ctrl+Shift+,即可跳回。
至此,Sublime的介绍就完成了,熟练运用以上3个插件,不仅便于阅读Docker源码,对于Go语言项目的编写也会有非常大的帮助。
相信习惯使用文本编辑器的读者,一定对开源软件Vim相当熟悉和亲切。Vim被誉为“编辑器之神”,学习曲线极为陡峭,但是,一旦熟练掌握了Vim自成体系的一套快捷键,代码编辑速度将快速提升,你也会从此对Vim爱不释手。本节只作为对Vim老用户的抛砖引玉,不适于Vim的初学者使用。
插件的安装
go-vim是一款让Vim可以高度支持Go语言的Vim插件,所以也是要使用Vim作为Go IDE的必装插件。
如果使用pathogen对插件进行管理,那么只要执行如下步骤即可。
cd ~/.vim/bundlegit clone /fatih/vim-go.git
对于Vundle用户,需要在.vimrc文件中加入下面这行:
Plugin 'fatih/vim-go'
并且打开Vim,在命令模式下执行:PluginInstall①)。
安装完插件后,为确保所有依赖的二进制文件(如gocode、godef、 goimports等),可以在命令模式下执行如下命令进行自动安装:
:GoInstallBinaries
除go-vim外,还有如下可选插件。
实时代码自动补全插件:YCM 或 neocomplete;
侧边栏类试图插件:tagbar;
代码段自动生成插件: ultisnips 或 neosnippet;
目录浏览器插件:nerdtree。
:GoDef [identifier]:用于代码跳转,默认会跳转的项为鼠标定位的函数或变量,后面可以跟标识符进行跳转。
:GoDoc:用于打开相关Go文档。
:GoInfo:用于显示鼠标定位的标识符的变量类型。
:GoFmt:用于对选中的代码进行Go格式化。
:GoDeps:用于显示当前包依赖的其他包。
:GoFiles:用于显示依赖当前包的其他包。
:GoInstallBinaries:用于安装Go语言的Vim依赖项。
:GoUpdateBinaries:用于更新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
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——容器与容器云 》,作者:张磊、孙健波。
最新教程周点击榜
微信扫一扫Go语言使用心得 | 程序师使用什么阅读工具看go代码_百度知道使用什么阅读工具看go代码_百度知道}

我要回帖

更多关于 代码阅读工具 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信