本節我將介紹幾個開發工具,它們都具有自動化提示,自動化fmt功能。因為它們都是跨平臺的,所以安裝步驟之類的都是通用的。
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#liteide)LiteIDE
LiteIDE是一款專門為Go語言開發的跨平臺輕量級集成開發環境(IDE),由visualfc編寫。

圖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/>](http://sourceforge.net/projects/liteide/files/%3E)
* 源碼地址?[https://github.com/visualfc/liteide](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列表中。
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#sublime-text)Sublime Text
這里將介紹Sublime Text 2(以下簡稱Sublime)+GoSublime的組合,那么為什么選擇這個組合呢?
* 自動化提示代碼,如下圖所示

圖1.5 sublime自動化提示界面
* 保存的時候自動格式化代碼,讓您編寫的代碼更加美觀,符合Go的標準。
* 支持項目管理

圖1.6 sublime項目管理界面
* 支持語法高亮
* Sublime Text 2可免費使用,只是保存次數達到一定數量之后就會提示是否購買,點擊取消繼續用,和正式注冊版本沒有任何區別。
接下來就開始講如何安裝,下載[Sublime](http://www.sublimetext.com/)
根據自己相應的系統下載相應的版本,然后打開Sublime,對于不熟悉Sublime的同學可以先看一下這篇文章[Sublime Text 2 入門及技巧](http://lucifr.com/139225/sublime-text-2-tricks-and-tips/)
1. 打開之后安裝 Package Control:Ctrl+` 打開命令行,執行如下代碼:
~~~
import urllib2,os; pf='Package Control.sublime-package'; ipp=sublime.installed_packages_path(); os.makedirs(ipp) if not os.path.exists(ipp) else None; 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已經安裝成功了。

圖1.7 sublime包管理
2. 安裝完之后就可以安裝Sublime的插件了。需安裝GoSublime、SidebarEnhancements和Go Build,安裝插件之后記得重啟Sublime生效,Ctrl+Shift+p打開Package Controll 輸入`pcip`(即“Package Control: Install Package”的縮寫)。
這個時候看左下角顯示正在讀取包數據,完成之后出現如下界面

圖1.8 sublime安裝插件界面
這個時候輸入GoSublime,按確定就開始安裝了。同理應用于SidebarEnhancements和Go Build。
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
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#vim)Vim
Vim是從vi發展出來的一個文本編輯器, 代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。

圖1.9 VIM編輯器自動化提示Go界面
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://monnand.me/p/vim-golang-environment/zhCN/)
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#emacs)Emacs
Emacs傳說中的神器,她不僅僅是一個編輯器,它是一個整合環境,或可稱它為集成開發環境,這些功能如讓使用者置身于全功能的操作系統中。

圖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](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_?手動開啟。
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#eclipse)Eclipse
Eclipse也是非常常用的開發利器,以下介紹如何使用Eclipse來編寫Go程序。

圖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](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的編譯器

圖1.12 設置Go的一些基礎信息
(2).配置Gocode(可選,代碼補全),設置Gocode路徑為之前生成的gocode.exe文件

圖1.13 設置gocode信息
(3).配置GDB(可選,做調試用),設置GDB路徑為MingW安裝目錄下的gdb.exe文件

圖1.14 設置GDB信息
6. 測試是否成功
新建一個go工程,再建立一個hello.go。如下圖:

圖1.15 新建項目編輯文件
調試如下(要在console中用輸入命令來調試):

圖1.16 調試Go程序
## [](https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.4.md#intellij-idea)IntelliJ IDEA
熟悉Java的讀者應該對于idea不陌生,idea是通過一個插件來支持go語言的高亮語法,代碼提示和重構實現。
1. 先下載idea,idea支持多平臺:win,mac,linux,如果有錢就買個正式版,如果不行就使用社區免費版,對于只是開發Go語言來說免費版足夠用了

2. 安裝Go插件,點擊菜單File中的Setting,找到Plugins,點擊,Broswer repo按鈕。國內的用戶可能會報錯,自己解決哈。

3. 這時候會看見很多插件,搜索找到Golang,雙擊,download and install。等到golang那一行后面出現Downloaded標志后,點OK。

然后點 Apply .這時候IDE會要求你重啟。
4. 重啟完畢后,創建新項目會發現已經可以創建golang項目了:

下一步,會要求你輸入 go sdk的位置,一般都安裝在C:\Go,linux和mac根據自己的安裝目錄設置,選中目錄確定,就可以了。
- 第一章 Go環境配置
- 1.1 Go安裝
- 1.2 GOPATH 與工作空間
- 1.3 Go 命令
- 1.4 Go開發工具
- 1.5 小結
- 第二章 Go語言基礎
- 2.1 你好,Go
- 2.2 Go基礎
- 2.3 流程和函數
- 2.4 struct類型
- 2.5 面向對象
- 2.6 interface
- 2.7 并發
- 2.8 總結
- 第三章 Web基礎
- 3.1 Web工作方式
- 3.2 Go搭建一個Web服務器
- 3.3 Go如何使得Web工作
- 3.4 Go的http包詳解
- 3.5 小結
- 第四章 表單
- 4.1 處理表單的輸入
- 4.2 驗證表單的輸入
- 4.3 預防跨站腳本
- 4.4 防止多次遞交表單
- 4.5 處理文件上傳
- 4.6 小結
- 第五章 訪問數據庫
- 5.1 database/sql接口
- 5.2 使用MySQL數據庫
- 5.3 使用SQLite數據庫
- 5.4 使用PostgreSQL數據庫
- 5.5 使用beedb庫進行ORM開發
- 5.6 NOSQL數據庫操作
- 5.7 小結
- 第六章 session和數據存儲
- 6.1 session和cookie
- 6.2 Go如何使用session
- 6.3 session存儲
- 6.4 預防session劫持
- 6.5 小結
- 第七章 文本處理
- 7.1 XML處理
- 7.2 JSON處理
- 7.3 正則處理
- 7.4 模板處理
- 7.5 文件操作
- 7.6 字符串處理
- 7.7 小結
- 第八章 Web服務
- 8.1 Socket編程
- 8.2 WebSocket
- 8.3 REST
- 8.4 RPC
- 8.5 小結
- 第九章 安全與加密
- 9.1 預防CSRF攻擊
- 9.2 確保輸入過濾
- 9.3 避免XSS攻擊
- 9.4 避免SQL注入
- 9.5 存儲密碼
- 9.6 加密和解密數據
- 9.7 小結
- 第十章 國際化和本地化
- 10.1 設置默認地區
- 10.2 本地化資源
- 10.3 國際化站點
- 10.4 小結
- 第十一章 錯誤處理,調試和測試
- 11.1 錯誤處理
- 11.2 使用GDB調試
- 11.3 Go怎么寫測試用例
- 11.4 小結
- 第十二章 部署與維護
- 12.1 應用日志
- 12.2 網站錯誤處理
- 12.3 應用部署
- 12.4 備份和恢復
- 12.5 小結
- 第十三章 如何設計一個Web框架
- 13.1 項目規劃
- 13.2 自定義路由器設計
- 13.3 controller設計
- 13.4 日志和配置設計
- 13.5 實現博客的增刪改
- 13.6 小結
- 第十四章 擴展Web框架
- 14.1 靜態文件支持
- 14.2 Session支持
- 14.3 表單及驗證支持
- 14.4 用戶認證
- 14.5 多語言支持
- 14.6 pprof支持
- 14.7 小結
- 附錄A 參考資料