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的值为0,而不是4。怎么可能? 事实证明,调试器因某种原因感到困惑。 如果我继续单步执行代码,它将跳回到z := x + y
,将4分配给z,然后再次转到最后一行并在屏幕上正确打印4。
我浪费了几个小时试图调试一段复杂的代码,却没有意识到我并不总是能得到正确的画面。 最终,我弄清楚了发生了什么,只是忽略了虚假的早期触发断点。
我不确定这是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支持的一些流行开发环境是:
- 蚀
- 原子
- 括号
- 科莫多
- 云9
文字编辑器
Go是一种简单的语言。 许多人仅使用文本编辑器(可能还带有一些其他Go插件)就感觉非常高效。 我不考虑那些真正集成的开发环境。 但是,如果您有多年使用文本编辑器的经验,并且已经根据自己的喜好对其进行了自定义,并且可以将其用于许多其他任务,那么这是有道理的。 这是一些更流行的文本编辑器及其Go插件的列表:
埃马克斯
使用以下插件:
- 进入模式
- GoFlyMake的 Flymake样式语法检查
- go-errcheck.el Emacs的Errcheck集成
崇高文字
使用GoSublime插件
Vim和NeoVim
带有大量的Go插件。
- 维哥
- 合成的
- 标签栏
- vim-compiler-go
- vim-godef
- vim-go-extra
结论
Go已经走了很长一段路,并且拥有一个强大的生态系统,其中包括针对开发环境的许多选项。 Delve调试器提供了出色的交互式调试体验,大多数顶级IDE都使用它。 尝试使用这些IDE,找到最适合您的IDE。
正确的IDE可以使使用Go变得更加有趣。
翻译自: https://code.tutsplus.com/tutorials/what-are-the-best-golang-ides--cms-28889