01.4.md~380a8ee74c41759d8189ad553423467994187253 14.4 KB
Newer Older
J
James Miranda 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
# 1.4 Go开发工具

本节我将介绍几个开发工具,它们都具有自动化提示,自动化fmt功能。因为它们都是跨平台的,所以安装步骤之类的都是通用的。

## LiteIDE

  LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写。

  ![](images/1.4.liteide.png?raw=true)

图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 2(以下简称Sublime)+GoSublime的组合,那么为什么选择这个组合呢?

  - 自动化提示代码,如下图所示

	![](images/1.4.sublime1.png?raw=true)

	图1.5 sublime自动化提示界面

  - 保存的时候自动格式化代码,让您编写的代码更加美观,符合Go的标准。
  - 支持项目管理
	
	![](images/1.4.sublime2.png?raw=true)
	
	图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已经安装成功了。

  ![](images/1.4.sublime3.png?raw=true)

	图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?raw=true)

	图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


## Vim
Vim是从vi发展出来的一个文本编辑器, 代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

![](images/1.4.vim.png?raw=true)

图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/)

## Emacs
Emacs传说中的神器,她不仅仅是一个编辑器,它是一个整合环境,或可称它为集成开发环境,这些功能如让使用者置身于全功能的操作系统中。

  ![](images/1.4.emacs.png?raw=true)

图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?raw=true)

图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?raw=true)

  图1.12 设置Go的一些基础信息


  (2).配置Gocode(可选,代码补全),设置Gocode路径为之前生成的gocode.exe文件

  ![](images/1.4.eclipse3.png?raw=true)

  图1.13 设置gocode信息

  (3).配置GDB(可选,做调试用),设置GDB路径为MingW安装目录下的gdb.exe文件

  ![](images/1.4.eclipse4.png?raw=true)
  
  图1.14 设置GDB信息

6. 测试是否成功

	新建一个go工程,再建立一个hello.go。如下图:
	
	  ![](images/1.4.eclipse5.png?raw=true)
	
	  图1.15 新建项目编辑文件
	
	调试如下(要在console中用输入命令来调试):
	
	  ![](images/1.4.eclipse6.png?raw=true)
	  
	  图1.16 调试Go程序

## IntelliJ IDEA
熟悉Java的读者应该对于idea不陌生,idea是通过一个插件来支持go语言的高亮语法,代码提示和重构实现。

1. 先下载idea,idea支持多平台:win,mac,linux,如果有钱就买个正式版,如果不行就使用社区免费版,对于只是开发Go语言来说免费版足够用了

	![](images/1.4.idea1.png?raw=true)

2. 安装Go插件,点击菜单File中的Setting,找到Plugins,点击,Broswer repo按钮。国内的用户可能会报错,自己解决哈。

	![](images/1.4.idea3.png?raw=true)

3. 这时候会看见很多插件,搜索找到Golang,双击,download and install。等到golang那一行后面出现Downloaded标志后,点OK。

	![](images/1.4.idea4.png?raw=true)
	
	然后点 Apply .这时候IDE会要求你重启。
	
4. 	重启完毕后,创建新项目会发现已经可以创建golang项目了:

	![](images/1.4.idea5.png?raw=true)

	下一步,会要求你输入 go sdk的位置,一般都安装在C:\Go,linux和mac根据自己的安装目录设置,选中目录确定,就可以了。

## links
   * [目录](<preface.md>)
   * 上一节: [Go 命令](<01.3.md>)
   * 下一节: [总结](<01.5.md>)