Files
build-web-application-with-…/zh/01.4.md
2017-06-30 23:24:54 +08:00

639 lines
21 KiB
Markdown
Raw 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?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 3以下简称Sublime+ GoSublime + gocode的组合那么为什么选择这个组合呢
- 自动化提示代码,如下图所示
![](images/1.4.sublime1.png?raw=true)
图1.5 sublime自动化提示界面
- 保存的时候自动格式化代码让您编写的代码更加美观符合Go的标准。
- 支持项目管理
![](images/1.4.sublime2.png?raw=true)
图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?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. 安装 [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 安装。
## Gogland
Gogland是JetBrains公司推出的Go语言集成开发环境是Idea Go插件是强化版。Gogland同样基于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?raw=true)
图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?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. 先下载ideaidea支持多平台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:\Golinux和mac根据自己的安装目录设置选中目录确定,就可以了。
## links
* [目录](<preface.md>)
* 上一节: [Go 命令](<01.3.md>)
* 下一节: [总结](<01.5.md>)