Golang 的艺术、哲学和科学

目录
前言
Golang 的粉丝群正在增长
Golang 开发:从入门到精通的 5 步
答案是……
早在 2013 年,当我第一次了解 Golang 编程语言时,我就面临着一种“to be or not to be”的问题。
虽然它不像哈姆雷特那样具有生命意义,但对我来说仍然几乎是形而上学的。
当任何项目的几乎所有技术都捆绑在一起时,为什么我们需要另一种技术?
作为一名 Java 后端开发人员,我对此非常好奇,并决定试一试。
掌握一种或多种辅助语言以轻松处理副任务总是有用的,因此 Go - 静态类型的编译编程语言 - 似乎是一个很棒的候选者。
所以最大的问题是 Go or not to Go?
我将分享我对为什么应该认真考虑 Golang 的见解,并将解释(不加糖衣)为什么它是一门具有挑战性但美丽的语言。
Golang 的粉丝群正在增长
让我们从事实开始:下图表明 Golang 目前正在抢尽风头。

在 2019 年,GO 正在迅速成为开发人员最喜欢的技术,从而使其在既定技术(例如 C ++,Python,JavaScript 等)中的存在感,
GitHub 指出,是根据 pull 请求的数量,GO 是排名前五的语言之一。
如此受欢迎有几个原因。我会举一些例子。

我特别喜欢 Go 的是,它倾向于组合而不是继承。制作复杂且多层的阶级继承结构不是一个好主意,因为它使您的代码变得不那么灵活且难以扩展。
因此,Golang 接口(方法集)系统消除了子类和基于类型的继承。
尽管如此,Golang 成功的基石还是并发性。它的概念包含在 Go 谚语中,这是一组 Golang 哲学概念。
Go 中的接口与 Java 中的接口非常不同。类型不需要显式声明。任何提供接口中命名的方法的类型都可以被视为实现。

Go 使用 goroutines 和通道而不是线程,仅消耗 2KB 内存。
因此,与 Java 线程相比,有机会通过更轻量级和可扩展的部署来转换数百万个 goroutine。
Goroutines 之间的通信由 Channel 提供,这意味着只有一个 Goroutine 可以在一定时间访问数据。
这种方法使我们能够创建异步并行程序,执行任务比以顺序编写的方式更快。
然而,关于 Go 的一切都不是那么美好。当我深入了解 Golang 时,发现它充满了惊喜。
Golang 开发:从入门到精通的 5 步
当你开始学习另一种语言时,总会有挫败感。
关于 Go 的主要抱怨之一是它的错误处理方法,有些人觉得这很有趣。与许多编程语言不同,它没有标准的异常逻辑。
GO 不允许开发人员在尝试捕获块中包裹代码。按照惯例,函数将错误作为其最后一个返回值。
因此,if err!= nil 语句,要在每个步骤中正确处理它。
if err != nil { // handle the error}
很多开发人员不喜欢这种看似不变的 nil 检查。就是为什么我经常将 Golang 的学习曲线与悲伤的五个阶段进行比较。

每一行 Go 代码都伴随着一种失望的感觉。我想,“根本不能有这么多的错误检查!”
但是,如果我们记得 Golang 是为 Google 创建的,那么可以在这样的决定中找到一些逻辑。
想象:数百个项目,成千上万的开发商,数百万个代码线。
为了确保一致性和简单性,创作者摆脱了一些“冗余”。例如,没有泛型,这会导致代码的重用级别降低。

如您所见,简单性似乎相当复杂。如果有这么多其他语言都有“正常”的错误处理,我为什么要忍受这个?
尽管我对 Go 很生气,但我决定朝着“从此幸福快乐”迈进。创作者推荐以下内容:

从理论上讲,这听起来不错,但在实践中,通常没有适当的上下文可以让开发人员正确处理错误。
如果有泛型,那可以帮助解决这个难题。通过利用空接口 (interface {}) 功能,可以实现某种通用机制。
然而,它带来了很多痛苦,作者自己承认:

在这种不确定的状态下,许多开发人员与 Golang 分手了。
就个人而言,我认为这是一个巨大的错误,因为您不应该在语言本身中寻找答案。
答案是……
现在,我已经用 Go 写了 3 年了。我可以说,其中一件棘手的事情是,接受阶段不会到来,直到你去进行一个语言可以证明自己的非常大的项目。
Go 是可能性的艺术。这不是关于什么是最好的或什么是正确的。这与语言无关。这是关于你可以做些什么来让它发挥作用。

一旦你尝试过这个,你会发现虽然还是一个有争议的事情,但在实践中很漂亮。
原文链接:https://www.itechart.com/blog/art-philosophy-and-science-golang-development/
版权声明: 本文为 InfoQ 作者【宇宙之一粟】的原创文章。
原文链接:【http://xie.infoq.cn/article/eb877c2dfcca509e799b41d5b】。文章转载请联系作者。
评论