閱讀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提供的服務,可能需要使用V*N才能訪問。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</blockquote>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 main import "fmt" func main() { fmt.Printf("hello, world\n") }
然后通過Go語言工具編譯運行,示例如下:
$ go run hello.go hello, 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語言閱讀的功能簡介
</ul>
LiteIDE支持以下Go語言閱讀功能。
- Go語言包瀏覽器(Package browser)
- 類視圖和大綱(Class view and outline)
- 文檔瀏覽(Document browser)
- Go語言Api函數檢索(GOPATH API index)
- 代碼跳轉(Jump to Declaration)
- 代碼表達式信息顯示(Find Usages)
</ul>
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比較方便地閱讀源碼了。
2. Sublime Text 2
Sublime Text 2(簡稱ST2)自2012年發布以來,便以其簡潔華麗的外觀、多平臺的支持、多語言支持以及超強的可擴展性而風靡起來。同樣,作為一款文本編輯器,與VIM相比,它自帶有目錄樹等功能,省去了一些配置上的麻煩,易于上手。
下載
打開Sublime Text的官方網站,頁面下方映入眼簾的就是一個大大的Download圖標,它會根據操作系統的平臺自動選擇適合的版本,只需直接點擊Download即可下載。當然我們也可以打開下載列表頁面( http://www.sublimetext.com/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}}}
</ul>
以上配置完成后,我們便可以方便地在終端通過subl命令打開Sublime Text 2了。
插件安裝
Package Control
- 點擊菜單欄偏好設置(Preferences)->包瀏覽(Browse Packages)。
- 打開它的上一級目錄Sublime-Text-2/,可以看到“Installed Packages”、“Packages”等文件夾。
- 下載Control.sublime-package包,并且復制到Installed Packages/目錄中。
- 重啟Sublime Text。
</ul>
GoSublime
- 安裝完Package Control后,默認情況下,通過快捷鍵Ctrl+Shift+P①即可調出命令執行模塊, 輸入Package Control:Install Package即可激活包安裝。
- 在跳出的可用包列表中,鍵入GoSublime后按回車鍵,即可下載并自動安裝。
- 安裝完GoSublime后,即可使用諸如代碼補全、格式調整等功能。
</ul>
CTags
- 與GoSublime相同,通過快捷鍵Ctrl+Shift+P調出命令執行模塊,輸入Package Control:Install Package,在跳出的可用包列表中鍵入CTags,再按回車鍵即可自動安裝。
- 安裝完成后,在Docker項目的根目錄下點擊鼠標右鍵,執行CTags:Rebuild Tags,對項目進行CTags檢索。
- 通過快捷鍵Ctrl+Shift+ . 即可進行代碼跳轉(跳轉到定義),通過快捷鍵Ctrl+Shift+,即可跳回。
</ul>
至此,Sublime的介紹就完成了,熟練運用以上3個插件,不僅便于閱讀Docker源碼,對于Go語言項目的編寫也會有非常大的幫助。
3. Vim
相信習慣使用文本編輯器的讀者,一定對開源軟件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外,還有如下可選插件。
- 實時代碼自動補全插件:YCM 或 neocomplete;
- 側邊欄類試圖插件:tagbar;
- 代碼段自動生成插件: ultisnips 或 neosnippet;
- 目錄瀏覽器插件:nerdtree。
</ul>
常用命令
- :GoDef [identifier]:用于代碼跳轉,默認會跳轉的項為鼠標定位的函數或變量,后面可以跟標識符進行跳轉。
- :GoDoc:用于打開相關Go文檔。
- :GoInfo:用于顯示鼠標定位的標識符的變量類型。
- :GoFmt:用于對選中的代碼進行Go格式化。
- :GoDeps:用于顯示當前包依賴的其他包。
- :GoFiles:用于顯示依賴當前包的其他包。
- :GoInstallBinaries:用于安裝Go語言的Vim依賴項。
- :GoUpdateBinaries:用于更新Go語言的Vim依賴項。
</ul>
關于Vim的介紹到此結束,但相信對于Vim老用戶來說,探索才剛剛開始。Vim作為一個經久不衰、廣受贊譽的好工具,一直都是每一個Geek心中最好的神兵利器!
4. Emacs
Emacs作為與Vim齊名的文本編輯器,號稱“神之編輯器”,用來瀏覽和編寫Go代碼也是非常方便的。本節也只作為 Emacs老用戶的拋磚引玉,在此之前,用戶需要做好適合自己的配置。下面我們就以Emacs24為例,簡單介紹幾個實用的插件,用戶需要先使用go get命令安裝好gofmt、godef、godoc、gocode等工具。
go-mode
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——容器與容器云》,作者:張磊、孫健波。
來自:http://dockone.io/article/709本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!