在这篇文章中,我将讨论为什么你需要尝试一下 Go 语言,以及应该从哪里学起。
-- Kirill Rogovoy
致谢
编译自 |
https://medium.freecodecamp.org/here-are-some-amazing-advantages-of-go-that-you-dont-hear-much-about-1af99de3b23a
作者 | Kirill Rogovoy
译者 | imquanquan 共计翻译:5.0篇 贡献时间:282 天
在这篇文章中,我将讨论为什么你需要尝试一下 Go 语言,以及应该从哪里学起。
Go 语言是可能是最近几年里你经常听人说起的编程语言。尽管它在 2009 年已经发布了,但它最近才开始流行起来。
根据 Google 趋势,Go 语言非常流行。
这篇文章不会讨论一些你经常看到的 Go 语言的主要特性。
相反,我想向您介绍一些相当小众但仍然很重要的功能。只有在您决定尝试 Go 语言后,您才会知道这些功能。
这些都是表面上没有体现出来的惊人特性,但它们可以为您节省数周或数月的工作量。而且这些特性还可以使软件开发更加愉快。
阅读本文不需要任何语言经验,所以不必担心你还不了解 Go 语言。如果你想了解更多,可以看看我在底部列出的一些额外的链接。
我们将讨论以下主题:
◈ GoDoc
◈ 静态代码分析
◈ 内置的测试和分析框架
◈ 竞争条件检测
◈ 学习曲线
◈ 反射
◈ Opinionatedness
◈ 文化
请注意,这个列表不遵循任何特定顺序来讨论。
GoDoc
Go 语言非常重视代码中的文档,所以也很简洁。
GoDoc
[1]
是一个静态代码分析工具,可以直接从代码中创建漂亮的文档页面。GoDoc 的一个显著特点是它不使用任何其他的语言,如 JavaDoc、PHPDoc 或 JSDoc 来注释代码中的结构,只需要用英语。
它使用从代码中获取的尽可能多的信息来概述、构造和格式化文档。它有多而全的功能,比如:交叉引用、代码示例,并直接链接到你的版本控制系统仓库。
而你需要做的只有添加一些像 这样子的老牌注释,而这些注释也会反映在的文档中。你甚至可以添加一些通过网络界面或者在本地可以实际运行的代码示例
[2]
。
GoDoc 是 Go 的唯一文档引擎,整个社区都在使用。这意味着用 Go 编写的每个库或应用程序都具有相同的文档格式。从长远来看,它可以帮你在浏览这些文档时节省大量时间。
例如,这是我最近一个小项目的 GoDoc 页面:pullkee — GoDoc
[3]
。
静态代码分析
Go 严重依赖于静态代码分析。例如用于文档的godoc
[1]
,用于代码格式化的gofmt
[4]
,用于代码风格的golint
[5]
,等等。
它们是如此之多,甚至有一个总揽了它们的项目gometalinter
[6]
,将它们组合成了单一的实用程序。
这些工具通常作为独立的命令行应用程序实现,并可轻松与任何编码环境集成。
静态代码分析实际上并不是现代编程的新概念,但是 Go 将其带入了绝对的范畴。我无法估量它为我节省了多少时间。此外,它给你一种安全感,就像有人在你背后支持你一样。
创建自己的分析器非常简单,因为 Go 有专门的内置包来解析和加工 Go 源码。
你可以从这个链接中了解到更多相关内容:GothamGo Kickoff Meetup: Alan Donovan 的 Go 静态分析工具
[7]
。
内置的测试和分析框架
您是否曾尝试为一个从头开始的 JavaScript 项目选择测试框架?如果是这样,你或许会理解经历这种过度分析analysis paralysis的痛苦。您可能也意识到您没有使用其中 80% 的框架。
一旦您需要进行一些可靠的分析,问题就会重复出现。
Go 附带内置测试工具,旨在简化和提高效率。它为您提供了最简单的 API,并做出最小的假设。您可以将它用于不同类型的测试、分析,甚至可以提供可执行代码示例。
它可以开箱即用地生成便于持续集成的输出,而且它的用法很简单,只需运行 。当然,它还支持高级功能,如并行运行测试,跳过标记代码,以及其他更多功能。
竞争条件检测
您可能已经听说了 Goroutine,它们在 Go 中用于实现并发代码执行。如果你未曾了解过,这里
[8]
有一个非常简短的解释。
无论具体技术如何,复杂应用中的并发编程都不容易,部分原因在于竞争条件的可能性。
简单地说,当几个并发操作以不可预测的顺序完成时,竞争条件就会发生。它可能会导致大量的错误,特别难以追查。如果你曾经花了一天时间调试集成测试,该测试仅在大约 80% 的执行中起作用?这可能是竞争条件引起的。
总而言之,在 Go 中非常重视并发编程,幸运的是,我们有一个强大的工具来捕捉这些竞争条件。它完全集成到 Go 的工具链中。
领取专属 10元无门槛券
私享最新 技术干货