Go Web编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 Go语言开发工具

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

LiteIDE

LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由visualfc编写,其主界面如图1-4所示。

图1.4 LiteIDE主界面

LiteIDE的主要特点如下。

1.支持主流操作系统

● Windows

● Linux

● Mac OS X

2.Go语言编译环境管理和切换

● 管理和切换多个Go语言编译环境

● 支持Go语言交叉编译

3.与Go语言标准一致的项目管理方式

● 基于GOPATH的包浏览器

● 基于GOPATH的编译系统

● 基于GOPATH的API文档检索

4.Go语言的编辑支持

● 类浏览器和大纲显示

● Gocode(代码自动完成工具)的完美支持

● Go语言文档查看和API快速检索

● 代码表达式信息显示F1

● 源代码定义跳转支持F2

● Gdb断点和调试支持

● gofmt自动格式化支持

5.其他特征

● 支持多国语言界面显示

● 完全插件体系结构

● 支持编辑器配色方案

● 基于Kate的语法显示支持

● 基于全文的单词自动完成

● 支持键盘快捷键绑定方案

● Markdown文档编辑支持

6.实时预览和同步显示

7.自定义CSS显示

8.可导出HTML和PDF文档

9.批量转换/合并为HTML/PDF文档

LiteIDE安装配置

LiteIDE安装

● 下载地址 code.google.com/p/golangide

● 源码地址 github.com/visualfc/liteide

首先安装好Go语言环境,然后根据操作系统下载LiteIDE对应的压缩文件,直接解压即可使用。

● Gocode安装

启用Go语言的输入自动完成需要安装Gocode。

        go get -u github.com/nsf/gocode

● 编译环境设置

根据系统自身要求切换和配置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+gocode+MarGo的组合,为什么选择这个组合呢?

● 自动化提示代码,如图1.5所示。

图1.5 Sublime自动化提示界面

● 保存的时候自动格式化代码,使编写的代码更加美观,符合Go语言的标准。

● 支持项目管理,其界面如图1.6所示。

图1.6 Sublime项目管理界面

● 支持语法高亮显示。

● Sublime Text 2可免费使用,只是保存次数达到一定数量之后,就会提示是否购买,单击取消继续用,和正式注册版本没有任何区别。

接下来介绍如何安装:首先下载 Sublime,根据自己的系统下载相应的版本,然后打开Sublime。

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.wbo
    nd.net/'+pf.replace(' ','%20')).read()); print 'Please restart Sublime Text
    to finish installation'

这时重启Sublime,可以发现在菜单栏多了一个“Package Control”栏目,如图1.7所示,说明Package Control已经成功安装。

图1.7 Sublime包管理

2.安装gocode和MarGo,打开终端运行如下代码(需要git)。

        go get github.com/nsf/gocode
        go get github.com/DisposaBoy/MarGo

这个时候我们会发现在$GOPATH/bin下面多了两个可执行文件:gocode和MarGo,这两个文件会在GoSublime加载时自动启动。

3.安装完之后就可以安装Sublime的插件了。需安装GoSublime、SidebarEnhancements和 Go Build,安装插件之后记得重启 Sublime 生效,利用 Ctrl+Shift+p 键打开 Package Controll,输入pcip(即“Package Control: Install Package”的缩写)。

这个时候看左下角显示正在读取包数据,完成之后出现如图1.8所示的界面。

图1.8 Sublime安装插件界面

再输入GoSublime,按“确定”按钮即可开始安装。同理,应用于SidebarEnhancements和Go Build。

4.验证是否安装成功,你可以打开 Sublime,打开 main.go,看看语法是否高亮显示,输入import是否自动化提示,import "fmt"之后,输入fmt.是否自动化提示有函数。

如果已经出现该提示,说明你已经安装完成,并且完成了自动提示。

如果没有出现该提示,一般情况是$PATH 没有配置正确。你可以打开终端,输入gocode,看是否能够正确运行,如果不行,就说明$PATH没有配置正确。

Vim

Vim 是从 vi 发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能特别丰富,被广大程序员使用,其编辑器自动化提示Go语言界面如图1.9所示。

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默认安装到$GOBIN下。

图1.9 Vim编辑器自动化提示Go语言界面

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里面的两个参数的含义说明。

● propose-builtins:是否自动提示Go语言的内置函数、类型和常量,默认为false,不提示。

● lib-path:默认情况下,gocode 只会搜索**$GOPATH/pkg/$GOOS_$GOARCH**和 $GOROOT/pkg/$GOOS_$GOARCH目录下的包,当然此设置可以设置我们额外的lib能访问的路径。

5.恭喜你,安装完成,你现在可以使用e main.go体验一下开发Go语言的乐趣。

Emacs

Emacs是传说中的神器,它不仅仅是一个编辑器,还是一个整合环境,或可称它为集成开发环境,这些功能就像让使用者置身于全功能的操作系统中,其主界面如图1.10所示。

图1.10 Emacs编辑Go语言主界面

● 配置Emacs高亮显示

        cp $GOROOT/misc/emacs/* ~/.emacs.d/

● 安装Gocode

        go get -u github.com/nsf/gocode

gocode默认安装到$GOBIN下。

● 配置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)

详细信息可参考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 手动开启。

Eclipse

Eclipse也是常用的开发利器,下面介绍如何使用Eclipse来编写Go语言程序,其主界面如图1.11所示。

图1.11 Eclipse编辑Go语言的主界面

1.首先下载并安装好Eclipse

2.下载goeclipse插件(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语言的编译器,其基础信息如图1.12所示。

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

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

图1.13 设置gocode信息

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

图1.14 设置GDB信息

6.测试是否成功

新建一个Go语言工程,再建立一个hello.go,如图1.15所示。

图1.15 新建项目编辑文件

在console中用输入命令调试,如图1.16所示。

图1.16 调试Go语言程序

IntelliJ IDEA

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

1.先下载IDEA,其主界面如图1.17所示,IDEA支持多平台:Win、Mac和Linux,有正式版和社区免费版可使用,对于只是开发Go语言来说社区免费版足够用。

图1.17 IDEA主界面

2.安装Go语言插件,单击菜单File中的Setting,找到Plugins,单击Broswer repo按钮。由于网络原因,用户可能需要一定的技术手段才能安装,其插件管理器如图1.18所示。

图1.18 IDEA插件管理器

3.这时候会看见很多插件,搜索找到Golang,双击,下载并安装。等到golang那一行后面出现Downloaded标志后,单击OK按钮,如图1.19所示。

图1.19 Go语言插件

然后单击Apply,这时候IDE会要求你重启。

4.重启完毕后,创建新项目会发现已经可以创建golang项目,如图1.20所示。

图1.20 IDEA新建Go语言项目界面

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