6.4 将gofmt/goimports与IDE或编辑器工具集成

日常开发工作中,Go开发人员多使用各种主流编辑器进行代码的编写、测试和重构工作,他们一般会将gofmt/goimports与编辑器集成,由编辑器在保存源文件时自动调用gofmt/goimports完成代码的格式化,而几乎不会手动敲入gofmt命令进行代码格式化。下面是对gofmt/goimport与主流Go源码编辑器集成方法的简要说明。

(1)Visual Studio Code

Visual Studio Code(VS Code)是微软开源的IDE工具,它集成了Git,支持智能提示,提供各种方便的快捷键等,最为强大的是其插件扩展。通过插件扩展,VS Code迅速抢占了各大编程语言的IDE榜单头部位置,Go语言也不例外。

微软为Go提供了官方插件支持——vscode-go,该插件项目已经正式成为Go官方子项目并被放入Go项目仓库中托管。vscode-go借助第三方工具实现了代码智能感知、代码导航、编辑、诊断、调试和单元测试等功能。其“在文件保存时格式化”功能就是通过调用gofmt或goimports实现的。VS Code与gofmt/goimports的集成很简单,只需在安装vscode-go插件时按照提示安装vscode-go所依赖的第三方工具或者保证gofmt在环境变量PATH的路径中即可(将$GOROOT/bin加入PATH环境变量)。如果要使用goimports,可通过前面goimports的安装命令手动安装,并保证goimports所在目录在PATH环境变量的路径中。

(2)Vim

Vim是在*NIX世界普遍存在的一款历史悠久的著名文本编辑器,也是很多做后端开发工作的开发者最喜欢的编辑工具。Vim的强大之处与VS Code类似,它也有一个强大的插件扩展机制,基于Vim插件我们便可以实现想要的各种功能。

Go和Vim通过vim-go插件连接在一起。vim-go是由前DigitalOcean工程师Fatih Arslan开发的Vim插件(需要Vim 7.4.2009及以上版本),你可以通过Pathogen、vim-plug或Vundle中的任一款Vim插件管理器安装vim-go插件。以使用vim-plug为例:

先安装vim-plug和vim-go两个Vim插件:

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
$ git clone https://github.com/fatih/vim-go.git ~/.vim/plugged/vim-go

编辑~/.vimrc文件,添加下面内容:

call plug#begin()
Plug 'fatih/vim-go'
call plug#end()

保存退出后再启动Vim,在命令模式下(在普通模式下输入“:”进入命令模式),执行GoInstallBinaries,vim-go会自动下载并安装其所依赖的第三方工具,其中就包含goimports。这些第三方工具都会被默认放置在$GOPATH/bin下。如果没有显式设置GOPATH,$HOME/go将被作为默认GOPATH。因此你要确保$GOPATH/bin在PATH环境变量中。

vim-go默认使用gofmt,在保存文件时对Go源文件进行重新格式化,不过你可以设置使用goimports,只需在.vimrc中添加下面这行配置:

let g:go_fmt_command = "goimports"

这样只要goimports可执行文件在PATH路径下,vim-go就可以使用它来格式化代码并管理文件头部的包列表了。

(3)GoLand

GoLand是知名IDE厂商JetBrains开发的Go语言IDE产品。JetBrains在IDE领域浸淫多年,积累了丰富的IDE产品经验,这让GoLand一经推出就大受Gopher欢迎。开源编辑器提供的功能在GoLand中均能找到,并且体验更佳。经过快速发展,目前GoLand已经成为市场占有率最高的商业Go语言IDE产品。

GoLand同样也是通过第三方工具(如gofmt/goimports)来实现对代码的格式化。在GoLand中,我们可以手动对文件或工程执行格式化,也可以创建File Watcher来实现在保存文件时对文件进行自动格式化。

手工格式化的调用方法(以GoLand 2019.1.3版本为例,后续版本设置方法可能有所不同)是,在GoLand主菜单中依次选择Tools→Go Tools→Go fmt file/Go fmt project/Goimports file,如图6-1所示。

061-1

图6-1 GoLand手工执行gofmt/goimports对源文件进行格式化

在保存文件时自动执行gofmt/goimports对源文件进行格式化的设置方法如下:在“Pereferences...”对话框中,依次选择Tools→File Watchers,然后添加一个File Watcher,选择go fmt模板或goimports模板即可(见图6-2)。

062-1

图6-2 配置GoLand以在保存文件时自动执行gofmt/goimports

小结

gofmt以及其背后的设计哲学是Go语言的创新,也是对编程世界的一项重要贡献。作为Go开发人员,我们要牢记在提交源码前先用gofmt对源码进行格式化,并学会将gofmt/goimports工具集成到IDE/编辑器工具中,让这一过程自动化,使代码格式化这件事在开发过程中变得透明,不会成为我们的心智负担。


[1]https://blog.golang.org/toward-go2

[2]https://github.com/bradfitz/goimports