谷歌员工无法理解一种出色的语言,但我们希望用它们来构建优秀的软件。因此,我们提供的语言必须易于理解和使用。
——谷歌最著名的软件工程师之一Rob Pike
作者 | Alexei Matyushkin
译者 |安翔
责编 | 屠敏
出品 | CSDN(ID:CSDNnews)
我曾多次尝试使用 Go 语言。毕竟,它由大名鼎鼎的 Rob Pike 创建,Rob Pike 曾设计过如 Plan9 和 Inferno) 操作系统以及 Limbo 编程语言,这些操作系统和编程语言都得到了广泛的使用并取得了巨大的成功。Go 有谷歌的强力支持,那么它就不会失败了吗?
答案是否定的。到目前为止,Go 是二十一世纪计算机科学领域最大的骗局。谷歌曾经背弃了其“Don’t be evil””的座右铭,尽管证据确凿,但是出于某种原因,人们仍然非常信任谷歌。
有人说,Go 是由谷歌创造的,那么一定不会失败。
我想说的是,Go 是一个现代科技公司的欺诈行为,我解释我的看法。
我将通过官方 Golang 书籍来展示其错误和设计缺陷。
你的第一个 Go 程序
本教程从程序结构的解释开始。
第一行如下:
大家都习惯称之为模块,Go 为了凸显自己的特别,将其称之为包。
接下来的代码是:
import "fmt"?开玩笑吧,这在编译型语言中完全是多余的。优秀的编译器可以很容易地解决所有调用 fmt.foo 并执行所需的任何导入。显式导入可能有用的唯一原因是从将函数 import(导入) 到包。
类型
Go 是一种静态类型的编程语言。这意味着变量始终具有特定类型,并且该类型不会更改。
这完全是谎言(我个人观点)。静态类型语言类型丰富,如 Haskell,需要一个巨大的样板才能完成非常简单的任务,而且 Go 宣称自己 easy-come-easy-go。这就是为什么除非另有说明,否则它实际上是静态类型的。我们稍后讨论 void 接口。
Go 的整数类型有:uint8、uint16、uint32、uint64、int8、int16、int32 和 int64。
在二十一世纪的第二个十年,我们通过编译的“静态类型”的语言让开发人员区分 int32 和 int64。
变量
尽管创建具有起始值的新变量非常常见,但是 Go 的语句比常见的方式更短:
一个普通的冒号+等号会出现什么问题呢?我们会失去 Go 所引以为傲的静态类型,该语法非常冗余和奇怪。
请注意,我们将变量移到 main 函数之外。这意味着其他函数也可以访问此变量。
该内容可以在范围一章中找到。好吧,它看起来像 Ruby 中的变量。或者作为Elixir 中的模块属性。这个变量的范围和生命周期到底是什么?我可以从这个模块中声明的函数返回它吗?教程中没有明确说明。
控制结构
Go 引入的第一个控制结构是 for 循环。减少了迭代和映射吗?不,我们从未听说过。声明一个最外层的变量并使用 for 进行循环。我谨慎地根据我的日历检查当前日期。它仍然是2018年。
第二个控制结构是 if。“给我一个 for 和 if,我便可以撬动地球,” 阿基米德曾经说过。顺便说一句,第三个控制结构是 switch。
所有控制结构就这些!语言必须尽可能简单。
数组、切片和 Maps
数组具有预定义的长度。切片是不固定长度的数组。Maps 是键-值对。Maps 需要声明和初始化,否则会引发运行时错误。
以上代码表明创建易读语言的目标已成功实现。
以下是访问 map 中元素的方法。
无话可说。我也听到有些人反对其安全性。这完全是所谓的斯德哥尔摩综合症。
我甚至无法想象有多少潜在的开发人员产生了这样的防御。也许不雇用他们会让事情变得简单。
函数
函数可以返回多个值(返回数组有什么问题?),此外,函数可以是可变参数的。到目前为止,这很好。
接口。听起来很吓人? - 并不是全部。Void 接口。
静态类型?安全?笑死人。
地狱之路已经铺好了。我相信他们会为傻瓜创造一种安全的静态类型语言。但现实世界是严酷和粗暴的。我们会给异想天开的孩子一些垃圾甜食,而不是健康的绿色蔬菜。
最后
在此,我对这门伟大语言的研究已经结束。我认为,好的代码取决于开发人员,而非计算机编程语言。很多语言设计存在缺陷,但是优秀的程序员用它创造了优秀的程序;有的编程语言很好,但是平庸的程序员用它设计了糟糕的程序。就个人而言,我并不关心用哪种语言来完成任务。
但请不要再称 Go 为安全、易于读写和静态类型的语言。谢谢。
原文:http://rocket-science.ru/hacking/2018/12/25/go-outta-here
本文为 CSDN 翻译,如需转载,请注明来源出处。
热 文推 荐
领取专属 10元无门槛券
私享最新 技术干货