Go 是傻瓜的完美语言吗?
当我想编写软件时,我会决定什么最适合我的目标。我决定我是要成为 Web 服务器、在盒子上运行的守护程序、在云中运行的 API 或无服务器功能,还是嵌入在芯片 (SoC) 上的软件。我在确定要使用的语言和工具链之前定义输出。当我定义了输出后,我创建了一个组件、工具和语言的候选列表,我可以用它来实现这个结果。
我的个人喜好无关紧要
我个人偏爱 C 语言,因为我可以用它编写的程序范围很广,而且我更喜欢编译的机器代码而不是解释器或 VM。使用 C,我可以编写从嵌入式设备到桌面应用程序、Web 应用程序和 GPU 加速 CUDA 应用程序的应用程序。然而,在几乎所有情况下,用 C 语言编写 Web 应用程序都是最不经济的方法。与使用 JavaScript 或 TypeScript 等语言相比,即使是经验丰富的软件工程师,用 C 编写 Web 应用程序所花费的时间也要长得多。
Go 是完美的折衷方案
就上市时间而言,使用 JavaScript 编写 Web 应用程序或无服务器应用程序确实非常快。我可以在几分钟内用 JavaScript 编写一个简单的应用程序,并立即将其无服务器部署到 AWS 上。然而,快速上市是以解释语言需要携带其运行时(节点)为代价的,因此与 C 中的实现相比,导致更高的运营成本和更低的性能。C 中的实现需要更长的时间和需要更彻底的测试。此外,它还需要进行一些调整才能在盒子或无服务器环境中安全地运行它。
有一个德语术语表示完美的妥协:“ Goldene Mitte ”。它翻译成“黄金中心”,指的是“正中靶心”。我个人认为,在当下,围棋绝对是那个“金中心”,“靶心”。Go 带来了编译语言的优势以及 JavaScript 或 Python 等简单语言的人体工程学。然而,这些优点的结果是 Go 经常被批评的缺点。
垃圾收集,但编译!
当进行性能基准测试时,Go 应用程序通常落后于 C,因为垃圾收集过程正在侵蚀运行时性能。尽管如此,Go在与开发人员的人体工程学相提并论的同时,在上市时间方面仍然远远超过任何解释型(JS、Python)或中间语言(MSIL 中的 C#,字节码中的 Java) 。它几乎完美地达到了 C#、Java、JavaScript、Python 和 C 或 Rust 之间的性能中心。请记住,C 中的内存管理和调试是一项挑战,它占用了用 C 编写应用程序所需的大部分时间。
什么是对象?结构错误。
Go 缺少几乎所有其他语言都有的东西:面向对象和继承。C#、Java、JavaScript、TypeScript 和 Python 都有。有些做得很好(C#、Java),有些做得很笨拙(JavaScript)。然而,缺少的面向对象从未阻止任何人使用 C 语言来支持像 C++ 这样的语言(有时被认为是一种怪物)。面向对象是一个很棒的概念,但通常可能不是编写软件的最经济的方法。
什么软件不能用 Go 写?
这取决于 Go 编译器,您可以将代码编译成什么。越来越多的目标平台得到支持或正在开发中(尤其是嵌入式平台)。目前有很多你不会用 Go 编写的东西:移动应用程序(React Native 目前几乎是 TypeScript 的领域),嵌入式软件或 GPU 加速应用程序(C 仍然是两者的王者)。除此之外,一切皆有可能。特别是对于服务器软件,Go 是目前完美的折衷方案。在这种情况下,您真的总是需要 Go 没有的所有功能吗?
Go 的发明者多次公开承认:他们为年轻的工程师设计语言,主要是那些刚加入谷歌的人。他们想阻止他们一遍又一遍地犯同样的错误,同时仍然保持生产力。他们基本上是为傻瓜建造的。
我喜欢当假人!
“ For Dummies ”系列丛书是著名的教育书籍合集,旨在提供有关各种主题的介绍性或基本信息。“傻瓜书”这个名字并没有侮辱人的意思,而是一种轻松幽默的说法,即这些书是为那些对这个主题不熟悉并且可能没有任何先验知识或经验的人而写的。 . 该系列的目标是通过将复杂的主题分解为更简单、更易于理解的概念,使更广泛的受众更容易理解它们。虽然单独使用“ dummy ”一词可能是一种侮辱,但在该丛书的上下文中,它并没有贬义或冒犯的意思。
对我来说,Go 感觉就像是一种编程语言,其设计与一本“傻瓜书”一模一样。它对你如何做事有很大的限制,同时仍然让你自己决定你想用它做什么。与书本一样,您可以从 Go 中得到的结果是惊人的。“ For Dummies ”书籍非常受欢迎。它的出版商威利是一家非常有名的出版商。这些书远非仅供娱乐之用,还提供了极其宝贵的教育价值。他们以非常优化的方式为您提供所需的东西,为此他们做出了妥协。近乎完美的妥协。Go 作为一种编程语言也是如此。