#1.4 Go开发工具
本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。
##LiteIDE
LiteIDE这个工具是由我们国内牛人VFC写的,使用起来相当地方便。它支持代码高亮、自动补全、项目管理等功能。下载地址
请根据自己的系统下载相应的版本,这些都是已经编译好的文件。Windows和Ubuntu系统可直接打开bin下面的liteide;Mac则需通过LaunchPad打开liteide。
大家可以看到左边是文件项目列表,左下角有相应的文件类导航,顶部有相应的调试工具和编译工具,主要的这个工具支持自动化提示同时支持本文件中函数的提示,目前还没有做到整个项目中函数的提示。配置也是很方便的,只要你已经按照前面几个小节配置了相应的go和$GOPATH
,那么打开软件之后,就可以直接新建项目开始用了。
如果你使用的是32位版本,那么按照以上步骤配置就可以了;而如果你使用的是64位版本,则需要修改 查看 => 选项 => LiteEnv => Win64.env => GOROOT=c:\go-w64 为你的$GOROOT
,不然会无法使用build
命令。
##Sublime Text
这里将介绍Sublime Text 2(以下简称Sublime)+GoSublime+gocode+MarGo的组合,那么为什么选择这个组合呢?
-
保存的时候自动格式化代码,让您编写的代码更加美观,符合Go的标准。
-
支持语法高亮
-
Sublime Text 2可免费使用,只是保存次数达到一定数量之后就会提示是否购买,点击取消继续用,和正式注册版本没有任何区别。
接下来就开始讲如何安装,下载Sublime
根据自己相应的系统下载相应的版本,然后打开Sublime,对于不熟悉Sublime的同学可以先看一下这篇文章Sublime Text 2 入门及技巧
-
打开之后安装 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已经安装成功了。
-
接下来安装gocode和MarGo。 打开终端运行如下代码(需要git)
go get -u github.com/nsf/gocode go get -u github.com/DisposaBoy/MarGo
这个时候我们会发现在$GOPATH/bin
下面多了两个可执行文件,gocode和MarGo,这两个文件会在GoSublime加载时自动启动。
- 安装完之后就可以安装Sublime的插件了。需安装GoSublime、SidebarEnhancements和Go Build,安装插件之后记得重启Sublime生效,Ctrl+Shift+p打开Package Controll 输入
pcip
(即“Package Control: Install Package”的缩写)。
这个时候看左下角显示正在读取包数据,完成之后出现如下界面
这个时候输入GoSublime,按确定就开始安装了。同理应用于SidebarEnhancements和Go Build。
- 验证是否安装成功,你可以打开Sublime,打开main.go,看看语法是不是高亮了,输入
import
是不是自动化提示了,import "fmt"
之后,输入fmt.
是不是自动化提示有函数了。
如果已经出现这个提示,那说明你已经安装完成了,并且完成了自动提示。
如果没有出现这样的提示,一般就是你的$PATH
没有配置正确。你可以打开终端,输入gocode,是不是能够正确运行,如果不行就说明$PATH
没有配置正确。
Vim是从vi发展出来的一个文本编辑器, 代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
-
配置vim高亮显示
cp -r $GOROOT/misc/vim/* ~/.vim/
-
在~/.vimrc文件中增加语法高亮显示
filetype plugin indent on syntax on
-
安装Gocode
go get -u github.com/nsf/gocode
gocode默认安装到
$GOPATH/bin
下面,需要把$GOPATH/bin
路径设置到系统$PATH
里面。 -
配置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"
-
恭喜你,安装完成,你现在可以使用
:e main.go
体验一下开发Go的乐趣。
Emacs传说中的神器,她不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。
-
配置Emacs高亮显示
cp $GOROOT/misc/emacs/* ~/.emacs.d/
-
安装Gocode
go get -u github.com/nsf/gocode
gocode默认安装到
$GOPATH/bin
里面下面,需要把$GOPATH/bin
路径设置到系统$PATH
里面。 -
配置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"
-
需要安装 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
-
配置.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"))
-
恭喜你,你现在可以体验在神器中开发Go的乐趣。默认speedbar是关闭的,如果打开需要把 ;; (speedbar 1) 前面的注释去掉,或者也可以通过 M-x speedbar 手动开启。
$Id$