鍍金池/ 教程/ GO/ 1.4 Go開發(fā)工具
7 文本處理
3 Web基礎(chǔ)
14 擴展Web框架
10.4 小結(jié)
2.2 Go基礎(chǔ)
2.8 總結(jié)
6.1 session和cookie
5.5 使用beedb庫進行ORM開發(fā)
8.3 REST
13.6 小結(jié)
5.4 使用PostgreSQL數(shù)據(jù)庫
14.6 pprof支持
14.1 靜態(tài)文件支持
11.2 使用GDB調(diào)試
7.7 小結(jié)
1 GO環(huán)境配置
14.5 多語言支持
7.1 XML處理
1.5 總結(jié)
13 如何設(shè)計一個Web框架
14.3 表單及驗證支持
12 部署與維護
10 國際化和本地化
1.1 Go 安裝
6.2 Go如何使用session
5.6 NOSQL數(shù)據(jù)庫操作
6.5 小結(jié)
9.4 避免SQL注入
12.1 應(yīng)用日志
4.2 驗證表單的輸入
10.1 設(shè)置默認地區(qū)
1.3 Go 命令
9.6 加密和解密數(shù)據(jù)
4.1 處理表單的輸入
4.4 防止多次遞交表單
11.3 Go怎么寫測試用例
8 Web服務(wù)
12.3 應(yīng)用部署
5.7 小結(jié)
12.5 小結(jié)
11 錯誤處理,調(diào)試和測試
9.2 確保輸入過濾
14.2 Session支持
6.4 預(yù)防session劫持
12.4 備份和恢復(fù)
8.1 Socket編程
13.1 項目規(guī)劃
13.4 日志和配置設(shè)計
7.6 字符串處理
13.2 自定義路由器設(shè)計
6.3 session存儲
3.4 Go的http包詳解
8.2 WebSocket
10.3 國際化站點
7.5 文件操作
7.4 模板處理
9.1 預(yù)防CSRF攻擊
13.3 controller設(shè)計
2.6 interface
14.4 用戶認證
2.3 流程和函數(shù)
附錄A 參考資料
11.1 錯誤處理
9.5 存儲密碼
9.3 避免XSS攻擊
12.2 網(wǎng)站錯誤處理
6 session和數(shù)據(jù)存儲
2.4 struct類型
3.3 Go如何使得Web工作
2.5 面向?qū)ο?/span>
3.1 Web工作方式
1.2 GOPATH與工作空間
2.1 你好,Go
9.7 小結(jié)
13.5 實現(xiàn)博客的增刪改
7.2 JSON處理
10.2 本地化資源
7.3 正則處理
2 Go語言基礎(chǔ)
5.1 database/sql接口
4.5 處理文件上傳
8.5 小結(jié)
4.3 預(yù)防跨站腳本
5.3 使用SQLite數(shù)據(jù)庫
14.7 小結(jié)
3.2 Go搭建一個Web服務(wù)器
2.7 并發(fā)
5 訪問數(shù)據(jù)庫
4 表單
3.5 小結(jié)
1.4 Go開發(fā)工具
11.4 小結(jié)
9 安全與加密
5.2 使用MySQL數(shù)據(jù)庫
4.6 小結(jié)
8.4 RPC

1.4 Go開發(fā)工具

本節(jié)我將介紹幾個開發(fā)工具,它們都具有自動化提示,自動化fmt功能。因為它們都是跨平臺的,所以安裝步驟之類的都是通用的。

LiteIDE

LiteIDE是一款專門為Go語言開發(fā)的跨平臺輕量級集成開發(fā)環(huán)境(IDE),由visualfc編寫。

http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.liteide.png" alt="" />

圖1.4 LiteIDE主界面

LiteIDE主要特點:

  • 支持主流操作系統(tǒng)
    • Windows
    • Linux
    • MacOS X
  • Go編譯環(huán)境管理和切換
    • 管理和切換多個Go編譯環(huán)境
    • 支持Go語言交叉編譯
  • 與Go標準一致的項目管理方式
    • 基于GOPATH的包瀏覽器
    • 基于GOPATH的編譯系統(tǒng)
    • 基于GOPATH的Api文檔檢索
  • Go語言的編輯支持
    • 類瀏覽器和大綱顯示
    • Gocode(代碼自動完成工具)的完美支持
    • Go語言文檔查看和Api快速檢索
    • 代碼表達式信息顯示F1
    • 源代碼定義跳轉(zhuǎn)支持F2
    • Gdb斷點和調(diào)試支持
    • gofmt自動格式化支持
  • 其他特征
    • 支持多國語言界面顯示
    • 完全插件體系結(jié)構(gòu)
    • 支持編輯器配色方案
    • 基于Kate的語法顯示支持
    • 基于全文的單詞自動完成
    • 支持鍵盤快捷鍵綁定方案
    • Markdown文檔編輯支持
      • 實時預(yù)覽和同步顯示
      • 自定義CSS顯示
      • 可導(dǎo)出HTML和PDF文檔
      • 批量轉(zhuǎn)換/合并為HTML/PDF文檔

LiteIDE安裝配置

  • LiteIDE安裝

  • 編譯環(huán)境設(shè)置

    根據(jù)自身系統(tǒng)要求切換和配置LiteIDE當前使用的環(huán)境變量。

    以Windows操作系統(tǒng),64位Go語言為例, 工具欄的環(huán)境配置中選擇win64,點編輯環(huán)境,進入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調(diào)用gcc支持CGO編譯。

    以Linux操作系統(tǒng),64位Go語言為例, 工具欄的環(huán)境配置中選擇linux64,點編輯環(huán)境,進入LiteIDE編輯linux64.env文件

      GOROOT=$HOME/go
      GOBIN=
      GOARCH=amd64
      GOOS=linux
      CGO_ENABLED=1
    
      PATH=$GOBIN:$GOROOT/bin:$PATH   
      。。。

    將其中的GOROOT=$HOME/go修改為當前Go安裝路徑,存盤即可。

  • GOPATH設(shè)置

    Go語言的工具鏈使用GOPATH設(shè)置,是Go語言開發(fā)的項目路徑列表,在命令行中輸入(在LiteIDE中也可以Ctrl+,直接輸入)go help gopath快速查看GOPATH文檔。

    在LiteIDE中可以方便的查看和設(shè)置GOPATH。通過菜單-查看-GOPATH設(shè)置,可以查看系統(tǒng)中已存在的GOPATH列表, 同時可根據(jù)需要添加項目目錄到自定義GOPATH列表中。

Sublime Text

這里將介紹Sublime Text 2(以下簡稱Sublime)+GoSublime的組合,那么為什么選擇這個組合呢?

  • 自動化提示代碼,如下圖所示

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.sublime1.png" alt="" />

    圖1.5 sublime自動化提示界面

  • 保存的時候自動格式化代碼,讓您編寫的代碼更加美觀,符合Go的標準。
  • 支持項目管理

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.sublime2.png" alt="" />

    圖1.6 sublime項目管理界面

  • 支持語法高亮
  • Sublime Text 2可免費使用,只是保存次數(shù)達到一定數(shù)量之后就會提示是否購買,點擊取消繼續(xù)用,和正式注冊版本沒有任何區(qū)別。

接下來就開始講如何安裝,下載Sublime

根據(jù)自己相應(yīng)的系統(tǒng)下載相應(yīng)的版本,然后打開Sublime,對于不熟悉Sublime的同學(xué)可以先看一下這篇文章Sublime Text 2 入門及技巧

  1. 打開之后安裝 Package Control:Ctrl+` 打開命令行,執(zhí)行如下代碼:

      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,可以發(fā)現(xiàn)在在菜單欄多了一個如下的欄目,說明Package Control已經(jīng)安裝成功了。

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.sublime3.png" alt="" />

    圖1.7 sublime包管理

  2. 安裝完之后就可以安裝Sublime的插件了。需安裝GoSublime、SidebarEnhancements和Go Build,安裝插件之后記得重啟Sublime生效,Ctrl+Shift+p打開Package Controll 輸入pcip(即“Package Control: Install Package”的縮寫)。

    這個時候看左下角顯示正在讀取包數(shù)據(jù),完成之后出現(xiàn)如下界面

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.sublime4.png" alt="" />

    圖1.8 sublime安裝插件界面

    這個時候輸入GoSublime,按確定就開始安裝了。同理應(yīng)用于SidebarEnhancements和Go Build。

  3. 驗證是否安裝成功,你可以打開Sublime,打開main.go,看看語法是不是高亮了,輸入import是不是自動化提示了,import "fmt"之后,輸入fmt.是不是自動化提示有函數(shù)了。

    如果已經(jīng)出現(xiàn)這個提示,那說明你已經(jīng)安裝完成了,并且完成了自動提示。

    如果沒有出現(xiàn)這樣的提示,一般就是你的$PATH沒有配置正確。你可以打開終端,輸入gocode,是不是能夠正確運行,如果不行就說明$PATH沒有配置正確。 (針對XP)有時候在終端能運行成功,但sublime無提示或者編譯解碼錯誤,請安裝sublime text3和convert utf8插件試一試

  4. MacOS下已經(jīng)設(shè)置了$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

Vim

Vim是從vi發(fā)展出來的一個文本編輯器, 代碼補全、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,在程序員中被廣泛使用。

http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.vim.png" alt="" />

圖1.9 VIM編輯器自動化提示Go界面

  1. 配置vim高亮顯示

      cp -r $GOROOT/misc/vim/* ~/.vim/
  2. 在~/.vimrc文件中增加語法高亮顯示

      filetype plugin indent on
      syntax on
  3. 安裝Gocode

      go get -u github.com/nsf/gocode

    gocode默認安裝到$GOPATH/bin下面。

  4. 配置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里面的兩個參數(shù)的含意說明:

    propose-builtins:是否自動提示Go的內(nèi)置函數(shù)、類型和常量,默認為false,不提示。

    lib-path:默認情況下,gocode只會搜索$GOPATH/pkg/$GOOS_$GOARCH$GOROOT/pkg/$GOOS_$GOARCH目錄下的包,當然這個設(shè)置就是可以設(shè)置我們額外的lib能訪問的路徑

  5. 恭喜你,安裝完成,你現(xiàn)在可以使用:e main.go體驗一下開發(fā)Go的樂趣。

更多VIM 設(shè)定, 可參考鏈接

Emacs

Emacs傳說中的神器,她不僅僅是一個編輯器,它是一個整合環(huán)境,或可稱它為集成開發(fā)環(huán)境,這些功能如讓使用者置身于全功能的操作系統(tǒng)中。

http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.emacs.png" alt="" />

圖1.10 Emacs編輯Go主界面

  1. 配置Emacs高亮顯示

      cp $GOROOT/misc/emacs/* ~/.emacs.d/
  2. 安裝Gocode

      go get -u github.com/nsf/gocode

    gocode默認安裝到$GOBIN里面下面。

  3. 配置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

    下載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 "http://\\.\\|//[^\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. 恭喜你,你現(xiàn)在可以體驗在神器中開發(fā)Go的樂趣。默認speedbar是關(guān)閉的,如果打開需要把 ;; (speedbar 1) 前面的注釋去掉,或者也可以通過 M-x speedbar 手動開啟。

Eclipse

Eclipse也是非常常用的開發(fā)利器,以下介紹如何使用Eclipse來編寫Go程序。

http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.eclipse1.png" alt="" />

圖1.11 Eclipse編輯Go的主界面

  1. 首先下載并安裝好Eclipse

  2. 下載goclipse插件

    http://code.google.com/p/goclipse/wiki/InstallationInstructions

  3. 下載gocode,用于go的代碼補全提示

    gocode的github地址:

      https://github.com/nsf/gocode

    在windows下要安裝git,通常用msysgit

    再在cmd下安裝:

      go get -u github.com/nsf/gocode

    也可以下載代碼,直接用go build來編譯,會生成gocode.exe

  4. 下載MinGW并按要求裝好

  5. 配置插件

    Windows->Reference->Go

    (1).配置Go的編譯器

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.eclipse2.png" alt="" />

    圖1.12 設(shè)置Go的一些基礎(chǔ)信息

    (2).配置Gocode(可選,代碼補全),設(shè)置Gocode路徑為之前生成的gocode.exe文件

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.eclipse3.png" alt="" />

    圖1.13 設(shè)置gocode信息

    (3).配置GDB(可選,做調(diào)試用),設(shè)置GDB路徑為MingW安裝目錄下的gdb.exe文件

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.eclipse4.png" alt="" />

    圖1.14 設(shè)置GDB信息

  6. 測試是否成功

    新建一個go工程,再建立一個hello.go。如下圖:

    ![](images/1.4.eclipse5.png)
    
    圖1.15 新建項目編輯文件

    調(diào)試如下(要在console中用輸入命令來調(diào)試):

    ![](images/1.4.eclipse6.png)
    
    圖1.16 調(diào)試Go程序

IntelliJ IDEA

熟悉Java的讀者應(yīng)該對于idea不陌生,idea是通過一個插件來支持go語言的高亮語法,代碼提示和重構(gòu)實現(xiàn)。

  1. 先下載idea,idea支持多平臺:win,mac,linux,如果有錢就買個正式版,如果不行就使用社區(qū)免費版,對于只是開發(fā)Go語言來說免費版足夠用了

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.idea1.png" alt="" />

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

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.idea3.png" alt="" />

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

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.idea4.png" alt="" />

    然后點 Apply .這時候IDE會要求你重啟。

  4. 重啟完畢后,創(chuàng)建新項目會發(fā)現(xiàn)已經(jīng)可以創(chuàng)建golang項目了:

    http://wiki.jikexueyuan.com/project/go-web-programming/images/1.4.idea5.png" alt="" />

    下一步,會要求你輸入 go sdk的位置,一般都安裝在C:\Go,linux和mac根據(jù)自己的安裝目錄設(shè)置,選中目錄確定,就可以了。