Go是一种很棒的编程语言。 它还带有完善的工具链。 许多开发人员只使用带有或不带有插件的纯文本编辑器来编写Go代码,但是许多其他开发人员更喜欢使用适当的IDE(集成开发环境)。

在本教程中,您将了解Go IDE的当前状态,并准备选择武器。

为什么要使用IDE?

我一直是IDE的忠实拥护者。 在我职业生涯的早期,我使用Microsoft的Visual Studio进行C / C ++开发以及C#。 我已经将NetBeans用于Java开发的一小段时间。 我已经使用JetBrains的PyCharm进行Python开发,如今,我使用JetBrains的Gogland进行Go开发。

我通常在大型软件系统上工作,该系统由具有数千个文件的多个项目组成。 对于大型代码库,我需要很多帮助。 我之所以如此喜欢IDE的主要原因如下:

集成代码组织和导航

有了良好的IDE,您可以按层次结构组织代码,轻松查看和导航它,还可以快速搜索代码。 IDE不仅可以进行文本搜索,还可以根据特定于语言的结构进行过滤(例如,仅显示具有特定名称的类或接口)。

综合测试

集成测试也至关重要。 我将大部分开发时间都花在了测试上–编写它们,试图使它们通过,或者调查为什么测试突然失败。 一个具有集成测试的良好IDE,将使您能够有选择地运行测试(全部,仅一个项目,之前运行的失败测试),突出显示失败,并让您快速跳转到代码中的正确位置以修复所有问题问题。

集成调试

对我来说,这可能是最重要的功能。 我喜欢集成调试器。 我希望能够添加一个断点(包括条件断点),查看堆栈跟踪以及查看每一帧的变量。

对于奖励积分(感谢PyCharm),我喜欢在遇到断点时进行交互式控制台会话。 使用printf调试(需要修改代码并重新生成)或查看日志文件(通常没有足够的粒度或很多噪音)的替代方法更加令人沮丧,并且生产率较低。 即使像gdb这样的独立调试器,也无法接近良好的集成调试器的生产力。

戈格兰

Gogland是我当前的Golang IDE。 这是一个非常年轻的产品,仍处于早期访问预览中,但是我仍然认为它是最完整和集成的Go IDE。 它建立在JetBrains的强大基础之上,因此非常强大且功能齐全。

代码编辑和协助

Gogland的代码编辑器很棒。 以下是其一些功能:

  • 标签式界面
  • 智能代码完成
  • 检查和快速修复
  • 重构
  • 快速导航
  • 文档,定义,用法,结构等的快速弹出窗口。
  • 代码生成(例如,实现接口)
  • 检测递归调用
  • 显示任何表达式的类型
  • 突出显示功能出口点
  • 参数提示

调试器

Gogland调试器非常出色。 它建立在Delve之上,我们也涵盖了其他IDE。 它使用熟悉的JetBrains调试配置来控制有关调试运行的所有内容,例如执行的二进制文件,环境变量,工作目录和命令行参数。

您可以设置断点,条件断点和监视。 遇到断点时,您可以观察堆栈跟踪和每一帧中的局部变量。 不幸的是,Go中没有显示全局变量,而是经常需要使用全局变量。

我在调试器中遇到一个问题,即过早击中断点! 考虑以下Go代码段:

x := 1
y := 3
z := x + y
fmt.Println(z)
z := x + y

我浪费了几个小时试图调试一段复杂的代码,却没有意识到我并不总是能得到正确的画面。 最终,我弄清楚了发生了什么,只是忽略了虚假的早期触发断点。

我不确定这是Delve还是Gogland问题,但我确定他们会尽快解决。 请记住,这只是一个抢先体验预览。

测试亚军

测试运行器使您可以运行,停止和重新启动测试。 我是能够成功地用它来运行和调试单元测试,以及集成测试,同时使用Go的测试包,以及像一个BDD测试框架银杏 。

去工具

Go附带了各种工具,Gogland将它们直接集成到IDE中。 您可以从“代码|转到工具”菜单中调用任何工具。 Gogland的内置代码格式使用标准的“ go fmt”工具。

版本控制

Gogland继承了其他JetBrains产品的成熟源代码管理系统。 我主要使用了git支持,它可以管理多个项目,出色的分支显示,多个变更集等等。 通过其他插件,也支持其他源代码控制系统,例如Mercurial和SVN。

综合终端

Gogland提供了一个内置终端,以备您需要运行某些命令时使用。 很高兴留在IDE中并且能够查看或从编辑器窗格复制或复制它们,而无需完全切换窗口。

可扩展性

Gogland具有大量的内置功能,但是它是完全可扩展的,并且其许多内置功能实际上是预加载的插件。 您可以安装许多有用的插件,并且可以根据需要开发自己的插件。

Visual Studio程式码

Visual Studio Code是主要由Microsoft开发的可扩展的开源代码编辑器(社区做出了许多贡献)。 它基于电子 ,而电子又基于铬 。 Visual Studio Code支持多种语言,最初专注于Web开发。 它对Go开发具有强大的支持,包括通过专用扩展集成所有Go工具和Delve调试器。 您需要安装一些Go软件包和工具才能上手。

Visual Studio Code还提供内置的git集成,分层的文件夹/文件资源管理器和选项卡式界面。

IntelliSense支持(自动完成功能,显示参数类型和文档)非常棒,并提供了非常愉快的编辑体验。 集成调试器(也可以在后台使用Delve)做得很好,并且与Gogland的调试器匹配。

Visual Studio Code响应速度很快。 这是其实质性功能列表:

  • 完成列表(使用gocode)
  • 签名帮助(使用gogetdoc或godef + godoc)
  • 片段
  • 快速信息(使用gogetdoc或godef + godoc)
  • 转到定义(使用gogetdoc或godef + godoc)
  • 查找参考(使用专家)
  • 参考CodeLens
  • 文件大纲(使用大纲)
  • 工作区符号搜索(使用go-symbols)
  • 重命名(使用gorename。注意:要在Windows下重命名后撤消以在Windows中工作,您需要在路径中使用diff工具)
  • 保存时构建(使用go build和go test)
  • 保存时棉绒(使用棉绒或gometalinter)
  • 格式(使用goreturns或goimports或gofmt)
  • 生成单元测试框架(使用getests)
  • 添加导入(使用gopkgs)
  • 在结构字段上添加/删除标签(使用gomodifytags)
  • 键入时的语义/语法错误报告(使用gotype-live)
  • 在光标下,当前文件中,当前包中,整个工作区中运行测试(使用go test)

LiteIDE

LiteIDE非常不寻常。 它是第一个认真的Go IDE,始于2011/2012,现在还在发展。 这是一个C ++ Qt应用程序,具有自定义外观。 与Gogland和Visual Studio Code相似,它使用Go工具和Delve调试器提供语言服务(尽管它是在Delve准备好之前从gdb调试器开始的)。

总体而言,它是功能齐全的IDE,但感觉并不完美。 据我所知,这几乎是一个人的努力,这是非同寻常的。 这是LiteIDE功能的细分。

核心功能

  • 系统环境管理
  • 可配置的构建命令
  • 简单而开放的调试系统(同时支持gdb和Delve)
  • 自动完成和主题化的Kate格式
  • 使用WordApi可配置的自动完成
  • 基于MIME类型的系统
  • 插件支持
  • 快速开启

Golang支持

  • 包浏览器
  • 类视图和大纲
  • 文件浏览器
  • Gocode支持
  • GOPATH API索引
  • 代码导航
  • 查找用法
  • 代码重构
  • 去操场

额外的支持

  • 降价促销
  • JSON格式
  • 高朗礼物

Wide很有趣,因为它是专用于Golang基于Web的IDE。 它专注于协作开发,并且是为团队设计的。 开发人员是中文的,大部分文档都是中文的,因此可能并不适合所有人。 在功能和集成方面,它绝对不能与其他IDE相提并论。

转到其他IDE的插件

有许多通用的IDE支持多种编程语言,并且还增加了对Go语言的支持。 我不是这种环境的忠实拥护者。 我认为,集成环境必须具有深度集成的特定于语言的钩子。 很难将其实现为简单的插件(尽管您可能会认为这正是VS Code所做的事情)。

添加了Go支持的一些流行开发环境是:

文字编辑器

Go是一种简单的语言。 许多人仅使用文本编辑器(可能还带有一些其他Go插件)就感觉非常高效。 我不考虑那些真正集成的开发环境。 但是,如果您有多年使用文本编辑器的经验,并且已经根据自己的喜好对其进行了自定义,并且可以将其用于许多其他任务,那么这是有道理的。 这是一些更流行的文本编辑器及其Go插件的列表:

使用以下插件:

使用GoSublime插件

Vim和NeoVim

带有大量的Go插件。

结论

Go已经走了很长一段路,并且拥有一个强大的生态系统,其中包括针对开发环境的许多选项。 Delve调试器提供了出色的交互式调试体验,大多数顶级IDE都使用它。 尝试使用这些IDE,找到最适合您的IDE。

正确的IDE可以使使用Go变得更加有趣。