## 1.8. 配置开发环境 工欲善其事,必先利其器!Go语言编程对外部的编辑工具要求甚低,但是配置适合自己的开发环境依然可以达到事倍功半的效果。本节简单介绍几个作者经常使用的Go语言编辑器和轻量级集成开发环境。 经过多年的发展完善,目前支持Go语言的开发工具已经很多了。其中LiteIDE是国人visualfc用Qt专门为Go语言开发的跨平台轻量级集成开发环境。在早期的Go语言的核心代码库中也包含了vim/Emacs/Netepad++/Eclipse等工具对Go语言支持的各种插件,目前这些第三方的扩展已经从核心库剥离到外部仓库独立维护。相对完整的IDE或插件列表可以从Go语言的官方wiki页面查看: https://github.com/golang/go/wiki/IDEsAndTextEditorPlugins 。 对于Windows环境,Go语言纯代码编写的话推荐Notepad++工具,如果需要代码自动补全和调试的话推荐使用微软的Visual Studio Code集成开发环境。如果是Mac OS X用户,可以选择免费的TextMate编辑器,它被誉为macOS下的Notepad++。如果是想基于iPad Pro平台做轻办公,可以选择收费的Textastic应用,它可以完美地配合Working Copy的Git工作流程,同时支持WebDAV协议。在Linux环境,Go语言纯代码编写的话推荐Gtihub Atom工具,如果是命令行的老司机用户也可以配置自己的Vim/Emacs开发环境,调试环境依然推荐Visual Studio Code。 ## Windows: Notepad++ Notepad++是Windows操作系统下严肃程序员们编写代码的利器!Notepad++不仅仅免费、体积小(安装程序7+MB)、启动迅速,而且对中文的各种编码支持非常友好,支持众多程序语言的语法高亮,对于正则表达式、函数列表、多工程等特性也有不错的支持。 首先去Notepad++的官网 http://notepad-plus-plus.org 下载最新的安装包。然后去 https://github.com/chai2010/notepadplus-go 下载针对Go语言的配置文件并安装。需要说明的是,对于Go汇编语言用户来说,notepadplus-go是目前唯一支持Go汇编语言语法高亮和函数列表的开发环境。 下面是Go语言的语法高亮预览,其中右侧是Go函数列表: ![](../images/ch1-08-npp-go.png) 下面是Go语言汇编的语法高亮预览:其中右侧是汇编函数列表: ![](../images/ch1-08-npp-go-asm.png) 对于Protobuf或GRPC的用户,可以从 https://github.com/chai2010/notepadplus-protobuf 下载相应的插件。 下面是Protobuf的语法高亮预览: ![](../images/ch1-08-npp-proto.png) **配置Notepad++的语法高亮** Notepad++从v6.2版本之后,用户自定义语言文件`userDefineLang.xml`改用`UDL2`语法,这些的配置文件全部采用的是新的`UDL2`的语法。 如果是通过Notepad++安装程序安装的,需要将`userDefineLang.xml`文件中的内容添加到`%APPDATA%\Notepad++\userDefineLang.xml`文件中,放在` ... `标签中间,然后重启Notepad++程序。 如果是从Notepad++ zip/7z压缩包解压绿色安装,配置文件`userDefineLang.xml`在解压目录。 **配置Notepad++函数列表支持** 函数列表功能是Notepad++ v6.4新增加的特性,配置方法和语法高亮的配置过程类似。需要注意的是v6.4和v6.5对应的`...`配置语法稍有不同,具体请参考`functionList.xml`文件中的注释说明。 如果是采用Notepad++安装程序安装的,需要将`functionList.xml`文件中的内容添加到`%APPDATA%\Notepad++\functionList.xml`文件中,放到` ... `和` ... `标签中间,然后重启Notepad++程序。 如果是从Notepad++ zip/7z压缩包解压绿色安装,配置文件`functionList.xml`在解压目录。 **Notepad++内置函数的自动补全** Notepad++还支持关键字的自动补全。假设Notepad++安装在``目录,将`go.xml`文件复制到`\plugins\APIs`目录下,然后重启Notepad++程序。 下面是内置函数`println`自动补全后函数参数提示的预览图: ![](../images/ch1-08-npp-auto-completion.png) 这是一个比较鸡肋的功能,用户根据自己需要选择是否安装。 ## 命令行窗口 对于Go语言开发来说,需要经常在命令行运行`go fmt`、`go test`、`go run x.go`等辅助工具。虽然Notepad++也可以将这些工具配置成标准的菜单中,但是命令行依然是不可缺少的开发环境。 不过Windows自带的命令行工具比较简陋,不是理想的命令行开发环境。如果读者还没有自己合适命令行环境,可以试试ConEmu这个免费命令行软件。ConEmu支持多标签页窗口,复制粘贴也比较方便。下面是ConEmu的预览图: ![](../images/ch1-08-ConEmu.png) ConEmu的主页在:http://conemu.github.io/ 。 ## macOS: TextMate 对于macOS平台的用户,免费的轻量级软件推荐TextMate编辑器。TextMate是macOS下的Notepadd++工具。支持目录列表,支持Go语言的诸多特性。下面是TextMate的预览图: ![](../images/ch1-08-TextMate-1.png) 对于iPad Pro用户,目前也有不少编辑软件对Go语言提供了不错的支持。比如Textastic Code、Coda等,很多都支持iPad和macOS平台的同步,它们一般都是需要单独购买的收费软件。 ## iOS: Textastic Textastic是一款收费应用,它是macOS/iOS下著名的轻量级代码编辑工具,支持包含Go语言在内的多达80多种编程语言的高亮显示。Textastic功能特点有: - 句法高亮,同时支持80余种语言,包含Go语言 - 与TextMate句法定义,主题兼容 - 对HTML、CSS、JavaScript、PHP、C、Objective-C支持自动补全代码 - Symbol list快速导航内容 - 自动保存代码和版本 - iCloud同步 (Mountain Lion only) 在macOS下,Textastic的界面和TextMate非常相似。不过Textastic在左边侧栏提供了基于工程的检索工具。下面是macOS下Textastic的预览图: ![](../images/ch1-08-macos-textastic.png) 因为iOS环境不支持编译和调试,如果需要在iOS环境编写Go程序,首先要解决和其他平台的共享问题。这样可以在iOS环境编写代码,然后在其他电脑上进行编译和测试。 最简单的共享方式是在iCloud的Textastic专有的目录中创建Go语言的工作区目录,然后通过iCloud方案实现和其他平台共享。此外,还可以通过WebDAV标准协议来实现文件的共享,常见的NAS系统都会提供WebDAV协议的共享方式。另外,用Go语言也很容易临时实现一个WebDAV的服务器,具体请参考第七章中WebDAV的相关主题。 下面是iPad Pro下Textastic的预览图: ![](../images/ch1-08-ios-textastic-02.png) 如果Go语言代码是放在Git服务器中,可以通过Working Copy应用将仓库克隆到iOS中,然后再Textastic中通过iOS协议打开工作区文件。编辑完成之后,在通过Working Copy将修改提交到中心仓库中。 下面是iPad Pro下Working Copy查看Git更新日志的预览图: ![](../images/ch1-08-ios-working-copy-02.png) ## 跨平台编辑器: Github Atom Gtihub Atom是Github专门为程序员推出的一个跨平台文本编辑器。具有简洁和直观的图形用户界面,内置支持Go语言语法高亮。同时Github Atom支持宏、自动完成分屏功能,同时集成了文件管理器,对于macOS和Linux用户来说是一个优秀的Go语言编辑器。 Github Atom的预览图: ![](../images/ch1-08-atom-01.png) Github Atom作为一个Go语言编辑器,不足之处是没有Go汇编语言的高亮显示插件。而且Github Atom对于大文件的支持性能不是很好。 ## 跨平台IDE: Visual Studio Code Visual Studio Code是微软推出的轻量级跨平台集成开发环境,简称VSCode。VSCode最初的目的是支持JavaScript和TypeScript开发,但是它逐步增加了第三方编程语言的支持,目前它已经可以说是最完美的Go语言集成开发环境了。 VSCode虽然是基于Gtihub Atom而来,不过VSCode支持Go语言的代码自动补全和调试功能,因此已经超越Github Atom单作为编辑器的定位,是一个轻量级的集成开发环境。VSCode对于大文件的支持也比Gtihub Atom优秀很多。 下面是用VScode打开的Go语言工程的预览图: ![](../images/ch1-08-vscode-01.png) 因为,VSCode和Gtihub Atom都是采用的Chrome核心,它不仅仅能编辑显示代码,还可以用来显示网页查看图像,甚至可以在一个分屏窗口中播放视频文件: ![](../images/ch1-08-vscode-02.jpg) VSCode安装Go语言插件中,默认的很多参数设置比较严格。比如,默认会使用`golint`来严格检查代码是否符合编码规范,对于git工程启动时还会自动获取和刷新。对于一般的Go语言代码来说,`golint`检测过于严格,很难完全通过(Go语言标准库也无法完全通过),从而导致每次保存时都会提示很多干扰信息。当然,对相对稳定的程序定期做`golint`检查也是有必要,它的信息可以作为我们改进代码的参考。同样的,如果git仓库有密码认证的话,VSCode在启动的时候总是弹出输入密码的对话框。 我们可以在工程目录的`.vscode/settings.json`配置文件中定制这些选项。下面配置是强制在保存的时候采用`gofmt`格式化代码,并且关闭保存时`golint`检查。同时在VSCode刚启动的时候,禁止Git自动刷新和获取操作。 ```json // 将设置放入此文件中以覆盖默认值和用户设置。 { // Pick 'gofmt', 'goimports' or 'goreturns' to run on format. "go.formatTool": "gofmt", // [EXPERIMENTAL] Run formatting tool on save. "go.formatOnSave": true, // Run 'golint' on save. "go.lintOnSave": false, "git.autorefresh": false, "git.autofetch": false } ``` VSCode作为一个专业的Go语言集成开发环境,稍显不足之处是没有Go汇编语言的高亮显示插件。