Files
2019-06-22 23:41:28 +08:00

645 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 1.4 Go 開發工具
本節我將介紹幾個開發工具,它們都具有自動化提示,自動化 fmt 功能。因為它們都是跨平臺的,所以安裝步驟之類別的都是通用的。
## LiteIDE
LiteIDE 是一款專門為 Go 語言開發的跨平臺輕量級整合開發環境IDE由 visualfc 編寫。
![](images/1.4.liteide.png)
圖 1.4 LiteIDE 主介面
**LiteIDE 主要特點:**
* 支援主流作業系統
* Windows
* Linux
* MacOS X
* Go 編譯環境管理和切換
* 管理和切換多個 Go 編譯環境
* 支援 Go 語言交叉編譯
* 與 Go 標準一致的專案管理方式
* 基於 GOPATH 的套件瀏覽器
* 基於 GOPATH 的編譯系統
* 基於 GOPATH 的 Api 文件檢索
* Go 語言的編輯支援
* 類別瀏覽器和大綱顯示
* Gocode(程式碼自動完成工具)的完美支援
* Go 語言文件檢視和 Api 快速檢索
* 程式碼表達式資訊顯示`F1`
* 原始碼定義跳轉支援`F2`
* Gdb 斷點和除錯支援
* gofmt 自動格式化支援
* 其他特徵
* 支援多國語言介面顯示
* 完全外掛體系結構
* 支援編輯器配色方案
* 基於 Kate 的語法顯示支援
* 基於全文的單詞自動完成
* 支援鍵盤快捷鍵繫結方案
* Markdown 文件編輯支援
* 即時預覽和同步顯示
* 自訂 CSS 顯示
* 可匯出 HTML 和 PDF 文件
* 批量轉換/合併為 HTML/PDF 文件
**LiteIDE 安裝配置**
* LiteIDE 安裝
* 下載地址 <http://sourceforge.net/projects/liteide/files>
* 原始碼地址 <https://github.com/visualfc/liteide>
首先安裝好 Go 語言環境,然後根據作業系統下載 LiteIDE 對應的壓縮檔案直接解壓即可使用。
* 編譯環境設定
根據自身系統要求切換和配置 LiteIDE 當前使用的環境變數。
以 Windows 作業系統64 位 Go 語言為例,
工具欄的環境配置中選擇 win64` 編輯環境`,進入 LiteIDE 編輯 win64.env 檔案
GOROOT=c:\go
GOBIN=
GOARCH=amd64
GOOS=windows
CGO_ENABLED=1
PATH=%GOBIN%;%GOROOT%\bin;%PATH%
。。。
將其中的 `GOROOT=c:\go` 修改為當前 Go 安裝路徑,存檔即可,如果有 MinGW64可以將 `c:\MinGW64\bin` 加入 PATH 中以便 go 呼叫 gcc 支援 CGO 編譯。
以 Linux 作業系統64 位 Go 語言為例,
工具欄的環境配置中選擇 linux64` 編輯環境`,進入 LiteIDE 編輯 linux64.env 檔案
GOROOT=$HOME/go
GOBIN=
GOARCH=amd64
GOOS=linux
CGO_ENABLED=1
PATH=$GOBIN:$GOROOT/bin:$PATH
。。。
將其中的`GOROOT=$HOME/go`修改為當前 Go 安裝路徑,存檔即可。
* GOPATH 設定
Go 語言的工具鏈使用 GOPATH 設定,是 Go 語言開發的專案路徑列表,在命令列中輸入(在 LiteIDE 中也可以`Ctrl+,`直接輸入)`go help gopath`快速檢視 GOPATH 文件。
在 LiteIDE 中可以方便的檢視和設定 GOPATH。透過 ` 選單檢視GOPATH`設定,可以檢視系統中已存在的 GOPATH 列表,
同時可根據需要新增專案目錄到自訂 GOPATH 列表中。
## Sublime Text
這裡將介紹 Sublime Text 3以下簡稱 Sublime+ GoSublime + gocode 的組合,那麼為什麼選擇這個組合呢?
- 自動化提示程式碼,如下圖所示
![](images/1.4.sublime1.png)
圖 1.5 sublime 自動化提示介面
- 儲存的時候自動格式化程式碼,讓您編寫的程式碼更加美觀,符合 Go 的標準。
- 支援專案管理
![](images/1.4.sublime2.png)
圖 1.6 sublime 專案管理介面
- 支援語法高亮
- Sublime Text 3 可免費使用,只是儲存次數達到一定數量之後就會提示是否購買,點選取消繼續用,和正式註冊版本沒有任何區別。
接下來就開始講如何安裝,下載 [Sublime](http://www.sublimetext.com/)
根據自己相應的系統下載相應的版本,然後開啟 Sublime對於不熟悉 Sublime 的同學可以先看一下這篇文章[Sublime Text 全程指南](http://blog.jobbole.com/88648/)或者[sublime text3 入門課程](http://blog.csdn.net/sam976/article/details/52076271)
1. 開啟之後安裝 Package ControlCtrl+` 開啟命令列,執行如下程式碼:
適用於 Sublime Text 3
```Go
import urllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())
```
適用於 Sublime Text 2
```Go
import urllib2,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();os.makedirs(ipp)ifnotos.path.exists(ipp)elseNone;urllib2.install_opener(urllib2.build_opener(urllib2.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib2.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read());print('Please restart Sublime Text to finish installation')
```
這個時候重啟一下 Sublime可以發現在在選單欄多了一個如下的節目說明 Package Control 已經安裝成功了。
![](images/1.4.sublime3.png)
圖 1.7 sublime 套件管理
2. 安裝完之後就可以安裝 Sublime 的外掛了。需安裝 GoSublime、SidebarEnhancements 和 Go Build安裝外掛之後記得重啟 Sublime 生效Ctrl+Shift+p 開啟 Package Controll 輸入`pcip`即“Package Control: Install Package”的縮寫
這個時候看左下角顯示正在讀取套件資料,完成之後出現如下介面
![](images/1.4.sublime4.png)
圖 1.8 sublime 安裝外掛介面
這個時候輸入 GoSublime按確定就開始安裝了。同理應用於 SidebarEnhancements 和 Go Build。
3. 安裝 [gocode](https://github.com/nsf/gocode/)
go get -u github.com/nsf/gocode
gocode 將會安裝在預設`$GOBIN`
另外建議安裝 gotests(產生測試程式碼):
先在 sublime 安裝 gotests 外掛,再執行:
```Go
go get -u -v github.com/cweill/gotests/...
```
3. 驗證是否安裝成功,你可以開啟 Sublime開啟 main.go看看語法是不是高亮了輸入 `import` 是不是自動化提示了,`import "fmt"`之後,輸入`fmt.`是不是自動化提示有函數了。
如果已經出現這個提示,那說明你已經安裝完成了,並且完成了自動提示。
如果沒有出現這樣的提示,一般就是你的`$PATH`沒有配置正確。你可以開啟終端,輸入 gocode是不是能夠正確執行如果不行就說明`$PATH`沒有配置正確。
(針對 XP)有時候在終端能執行成功,但 sublime 無提示或者編譯解碼錯誤,請安裝 sublime text3 和 convert utf8 外掛試一試
4. MacOS 下已經設定了$GOROOT, $GOPATH, $GOBIN還是沒有自動提示怎麼辦。
請在 sublime 中使用 command + 9 然後輸入 env 檢查$PATH, GOROOT, $GOPATH, $GOBIN 等變數, 如果沒有請採用下面的方法。
首先建立下面的連線, 然後從 Terminal 中直接啟動 sublime
ln -s /Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl /usr/local/bin/sublime
## Visual Studio Code
VSCode 是微軟基於 Electron 和 web 技術建構的開源編輯器, 是一款很強大的編輯器。開源地址:https://github.com/Microsoft/VSCode
1、安裝 Visual Studio Code 最新版
官方網站https://code.visualstudio.com/
下載 Visual Studio Code 最新版,安裝過程略。
2、安裝 Go 外掛
點選右邊的 Extensions 圖示
搜尋 Go 外掛
在外掛列表中,選擇 Go進行安裝安裝之後系統會提示重啟 Visual Studio Code。
建議把自動儲存功能開啟。開啟方法為:選擇選單 File點選 Auto save。
VSCode 程式碼設定可用於 Go 擴充套件。這些都可以在使用者的喜好來設定或工作區設定(.VSCode/settings.json
開啟首選項-使用者設定 settings.json:
```Go
{
"go.buildOnSave": true,
"go.lintOnSave": true,
"go.vetOnSave": true,
"go.buildFlags": [],
"go.lintFlags": [],
"go.vetFlags": [],
"go.coverOnSave": false,
"go.useCodeSnippetsOnFunctionSuggest": false,
"go.formatOnSave": true,
//goimports
"go.formatTool": "goreturns",
"go.goroot": "",//你的 Goroot
"go.gopath": "",//你的 Gopath
}
```
接著安裝相依套件支援(網路不穩定,請直接到 GitHub [Golang](https://github.com/golang) 下載再移動到相關目錄):
```Go
go get -u -v github.com/nsf/gocode
go get -u -v github.com/rogpeppe/godef
go get -u -v github.com/zmb3/gogetdoc
go get -u -v github.com/golang/lint/golint
go get -u -v github.com/lukehoban/go-outline
go get -u -v sourcegraph.com/sqs/goreturns
go get -u -v golang.org/x/tools/cmd/gorename
go get -u -v github.com/tpng/gopkgs
go get -u -v github.com/newhook/go-symbols
go get -u -v golang.org/x/tools/cmd/guru
go get -u -v github.com/cweill/gotests/...
```
VSCode 還有一項很強大的功能就是斷點除錯,結合 [delve](https://github.com/derekparker/delve) 可以很好的進行 Go 程式碼除錯
```Go
go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv
brew install go-delve/delve/delve(mac 可選)
```
如果有問題再來一遍:
```Go
go get -v -u github.com/peterh/liner github.com/derekparker/delve/cmd/dlv
```
注意 : 修改"dlv-cert"證書, 選擇"顯示簡介"->"信任"->"程式碼簽名" 修改為: 始終信任
開啟首選項-工作區設定,配置 launch.json:
```Go
{
"version": "0.2.0",
"configurations": [
{
"name": "main.go",
"type": "go",
"request": "launch",
"mode": "debug",
"remotePath": "",
"port": 2345,
"host": "127.0.0.1",
"program": "${workspaceRoot}",//工作空間路徑
"env": {},
"args": [],
"showLog": true
}
]
}
```
## Atom
Atom 是 GitHub 基於 Electron 和 web 技術建構的開源編輯器, 是一款很漂亮強大的編輯器缺點是速度比較慢。
首先要先安裝下 Atom下載地址: https://atom.io/
然後安裝 go-plus 外掛:
go-plus 是 Atom 上面的一款開源的 go 語言開發環境的的外掛
它需要依賴下面的 go 語言工具:
```Go
1.autocomplete-go gocode 的程式碼自動提示
2.gofmt 使用 goftm,goimports,goturns
3.builder-go:go-install go-test驗證程式碼給出建議
4.gometalinet-linter:goline,vet,gotype 的檢查
5.navigator-godef:godef
6.tester-goo :go test
7.gorename :rename
```
在 Atom 中的 Preference 中可以找到 install 選單,輸入 go-plus然後點選安裝(install)
就會開始安裝 go-plus go-plus 外掛會自動安裝對應的依賴外掛,如果沒有安裝對應的 go 的類別函式庫會自動執行: go get 安裝。
## GoLand
GoLand 是 JetBrains 公司推出的 Go 語言整合開發環境,是 Idea Go 外掛的強化版。GoLand 同樣基於 IntelliJ 平臺開發,支援 JetBrains 的外掛體系。
下載地址: https://www.jetbrains.com/go/
## Vim
Vim 是從 vi 發展出來的一個文字編輯器, 程式碼自動完成、編譯及錯誤跳轉等方便程式設計的功能特別豐富,在程式設計師中被廣泛使用。
vim-go 是 vim 上面的一款開源的 go 語言使用最為廣泛開發環境的的外掛
外掛地址:[github.com/fatih/vim-go](https://github.com/fatih/vim-go)
vim 的外掛管理主要有[Pathogen](https://github.com/tpope/vim-pathogen)與[Vundle](https://github.com/VundleVim/Vundle.vim)
,但是其作用的方面不同。
pathogen 是為了解決每一個外掛安裝後文件分散到多個目錄不好管理而存在的。vundle 是為了解決自動搜尋及下載外掛而存在的。
這兩個外掛可同時使用。
1.安裝 Vundle
```sh
mkdir ~/.vim/bundle
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
```
修改.vimrc將 Vundle 的相關配置置在最開始處([詳細參考 Vundle 的介紹文件](https://github.com/VundleVim/Vundle.vim))
```sh
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
```
2.安裝 Vim-go
修改~/.vimrc在 vundle#begin 和 vundle#end 間增加一行:
```sh
Plugin 'fatih/vim-go'
```
在 Vim 內執行: PluginInstall
3.安裝 YCM(Your Complete Me)進行自動自動完成
在~/.vimrc 中新增一行:
```sh
Plugin 'Valloric/YouCompleteMe'
```
在 Vim 內執行: PluginInstall
![](images/1.4.vim.png)
圖 1.9 VIM 編輯器自動化提示 Go 介面
接著我們繼續配置 vim:
1. 配置 vim 高亮顯示
cp -r $GOROOT/misc/vim/* ~/.vim/
2. 在~/.vimrc 檔案中增加語法高亮顯示
filetype plugin indent on
syntax on
3. 安裝[Gocode](https://github.com/nsf/gocode/)
go get -u github.com/nsf/gocode
gocode 預設安裝到`$GOPATH/bin`下面。
4. 配置[Gocode](https://github.com/nsf/gocode/)
~ cd $GOPATH/src/github.com/nsf/gocode/vim
~ ./update.bash
~ gocode set propose-builtins true
propose-builtins true
~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64"
lib-path "/home/border/gocode/pkg/linux_amd64"
~ gocode set
propose-builtins true
lib-path "/home/border/gocode/pkg/linux_amd64"
>gocode set 裡面的兩個參數的含意說明:
>
>propose-builtins是否自動提示 Go 的內建函式、型別和常數,預設為 false不提示。
>
>lib-path:預設情況下gocode 只會搜尋**$GOPATH/pkg/$GOOS_$GOARCH** 和 **$GOROOT/pkg/$GOOS_$GOARCH**目錄下的套件,當然這個設定就是可以設定我們額外的 lib 能訪問的路徑
5. 恭喜你,安裝完成,你現在可以使用`:e main.go`體驗一下開發 Go 的樂趣。
更多 VIM 設定, 可參考 [ 連結](http://www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html)
## Emacs
Emacs 傳說中的神器,她不僅僅是一個編輯器,它是一個整合環境,或可稱它為整合開發環境,這些功能如讓使用者置身於全功能的作業系統中。
![](images/1.4.emacs.png)
圖 1.10 Emacs 編輯 Go 主介面
1. 配置 Emacs 高亮顯示
cp $GOROOT/misc/emacs/* ~/.emacs.d/
2. 安裝[Gocode](https://github.com/nsf/gocode/)
go get -u github.com/nsf/gocode
gocode 預設安裝到`$GOBIN`裡面下面。
3. 配置[Gocode](https://github.com/nsf/gocode/)
~ cd $GOPATH/src/github.com/nsf/gocode/emacs
~ cp go-autocomplete.el ~/.emacs.d/
~ gocode set propose-builtins true
propose-builtins true
~ gocode set lib-path "/home/border/gocode/pkg/linux_amd64" // 換為你自己的路徑
lib-path "/home/border/gocode/pkg/linux_amd64"
~ gocode set
propose-builtins true
lib-path "/home/border/gocode/pkg/linux_amd64"
4. 需要安裝 [Auto Completion](http://www.emacswiki.org/emacs/AutoComplete)
下載 AutoComplete 並解壓
~ make install DIR=$HOME/.emacs.d/auto-complete
配置~/.emacs 檔案
;;auto-complete
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict")
(ac-config-default)
(local-set-key (kbd "M-/") 'semantic-complete-analyze-inline)
(local-set-key "." 'semantic-complete-self-insert)
(local-set-key ">" 'semantic-complete-self-insert)
詳細資訊參考: http://www.emacswiki.org/emacs/AutoComplete
5. 配置.emacs
;; golang mode
(require 'go-mode-load)
(require 'go-autocomplete)
;; speedbar
;; (speedbar 1)
(speedbar-add-supported-extension ".go")
(add-hook
'go-mode-hook
'(lambda ()
;; gocode
(auto-complete-mode 1)
(setq ac-sources '(ac-source-go))
;; Imenu & Speedbar
(setq imenu-generic-expression
'(("type" "^type *\\([^ \t\n\r\f]*\\)" 1)
("func" "^func *\\(.*\\) {" 1)))
(imenu-add-to-menubar "Index")
;; Outline mode
(make-local-variable 'outline-regexp)
(setq outline-regexp "//\\.\\|//[^\r\n\f][^\r\n\f]\\|pack\\|func\\|impo\\|cons\\|var.\\|type\\|\t\t*....")
(outline-minor-mode 1)
(local-set-key "\M-a" 'outline-previous-visible-heading)
(local-set-key "\M-e" 'outline-next-visible-heading)
;; Menu bar
(require 'easymenu)
(defconst go-hooked-menu
'("Go tools"
["Go run buffer" go t]
["Go reformat buffer" go-fmt-buffer t]
["Go check buffer" go-fix-buffer t]))
(easy-menu-define
go-added-menu
(current-local-map)
"Go tools"
go-hooked-menu)
;; Other
(setq show-trailing-whitespace t)
))
;; helper function
(defun go ()
"run current buffer"
(interactive)
(compile (concat "go run " (buffer-file-name))))
;; helper function
(defun go-fmt-buffer ()
"run gofmt on current buffer"
(interactive)
(if buffer-read-only
(progn
(ding)
(message "Buffer is read only"))
(let ((p (line-number-at-pos))
(filename (buffer-file-name))
(old-max-mini-window-height max-mini-window-height))
(show-all)
(if (get-buffer "*Go Reformat Errors*")
(progn
(delete-windows-on "*Go Reformat Errors*")
(kill-buffer "*Go Reformat Errors*")))
(setq max-mini-window-height 1)
(if (= 0 (shell-command-on-region (point-min) (point-max) "gofmt" "*Go Reformat Output*" nil "*Go Reformat Errors*" t))
(progn
(erase-buffer)
(insert-buffer-substring "*Go Reformat Output*")
(goto-char (point-min))
(forward-line (1- p)))
(with-current-buffer "*Go Reformat Errors*"
(progn
(goto-char (point-min))
(while (re-search-forward "<standard input>" nil t)
(replace-match filename))
(goto-char (point-min))
(compilation-mode))))
(setq max-mini-window-height old-max-mini-window-height)
(delete-windows-on "*Go Reformat Output*")
(kill-buffer "*Go Reformat Output*"))))
;; helper function
(defun go-fix-buffer ()
"run gofix on current buffer"
(interactive)
(show-all)
(shell-command-on-region (point-min) (point-max) "go tool fix -diff"))
6. 恭喜你,你現在可以體驗在神器中開發 Go 的樂趣。預設 speedbar 是關閉的,如果開啟需要把 ;; (speedbar 1) 前面的註釋去掉,或者也可以透過 *M-x speedbar* 手動開啟。
## Eclipse
Eclipse 也是非常常用的開發利器,以下介紹如何使用 Eclipse 來編寫 Go 程式。
![](images/1.4.eclipse1.png)
圖 1.11 Eclipse 編輯 Go 的主介面
1. 首先下載並安裝好[Eclipse](http://www.eclipse.org/)
2. 下載[goclipse](https://code.google.com/p/goclipse/)外掛
http://code.google.com/p/goclipse/wiki/InstallationInstructions
3. 下載 gocode用於 go 的程式碼自動完成提示
gocode 的 GitHub 地址:
https://github.com/nsf/gocode
在 windows 下要安裝 git通常用[msysgit](https://code.google.com/p/msysgit/)
再在 cmd 下安裝:
go get -u github.com/nsf/gocode
也可以下載程式碼,直接用 go build 來編譯,會產生 gocode.exe
4. 下載[MinGW](http://sourceforge.net/projects/mingw/files/MinGW/)並按要求裝好
5. 配置外掛
Windows->Reference->Go
(1).配置 Go 的編譯器
![](images/1.4.eclipse2.png)
圖 1.12 設定 Go 的一些基礎資訊
(2).配置 Gocode可選程式碼自動完成設定 Gocode 路徑為之前產生的 gocode.exe 檔案
![](images/1.4.eclipse3.png)
圖 1.13 設定 gocode 資訊
(3).配置 GDB可選做除錯用設定 GDB 路徑為 MingW 安裝目錄下的 gdb.exe 檔案
![](images/1.4.eclipse4.png)
圖 1.14 設定 GDB 資訊
6. 測試是否成功
建立一個 go 工程,再建立一個 hello.go。如下圖
![](images/1.4.eclipse5.png)
圖 1.15 建立專案編輯檔案
除錯如下(要在 console 中用輸入命令來除錯):
![](images/1.4.eclipse6.png)
圖 1.16 除錯 Go 程式
## IntelliJ IDEA
熟悉 Java 的讀者應該對於 idea 不陌生idea 是透過一個外掛來支援 go 語言的高亮語法,程式碼提示和重構實現。
1. 先下載 ideaidea 支援多平臺win,mac,linux如果有錢就買個正式版如果不行就使用社群免費版對於只是開發 Go 語言來說免費版足夠用了
![](images/1.4.idea1.png)
2. 安裝 Go 外掛,點選選單 File 中的 Setting找到 Plugins點選,Broswer repo 按鈕。國內的使用者可能會報錯,自己解決哈。
![](images/1.4.idea3.png)
3. 這時候會看見很多外掛,搜尋找到 Golang雙擊,download and install。等到 golang 那一行後面出現 Downloaded 標誌後,點 OK。
![](images/1.4.idea4.png)
然後點 Apply .這時候 IDE 會要求你重啟。
4. 重啟完畢後,建立新專案會發現已經可以建立 golang 專案了:
![](images/1.4.idea5.png)
下一步,會要求你輸入 go sdk 的位置,一般都安裝在 C:\Golinux 和 mac 根據自己的安裝目錄設定,選中目錄確定,就可以了。
## links
* [目錄](<preface.md>)
* 上一節:[Go 命令](<01.3.md>)
* 下一節:[總結](<01.5.md>)