閱讀Docker源代碼的神兵利器

jopen 9年前發布 | 17K 次閱讀 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就會簡單很多。

閱讀Docker源代碼的神兵利器

圖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上面方便地讀文檔。

      閱讀Docker源代碼的神兵利器

      圖2    LiteIDE功能界面展示

      打開IDE以后,大家可以在設置中查看和修改快捷鍵設置,如圖3所示。

      閱讀Docker源代碼的神兵利器

      圖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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
                   轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
                   本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!