Go (Golang) 是 Google 开发的一种编译型、并发型,并具有垃圾回收功能的编程语言,于 2009 年 11 月正式宣布推出成为开源项目,2012 年发布 1.0 版本。
如今,谷歌仍在继续投资该语言,最新的稳定版本是 1.22.5。在最新的 TIOBE 7 月榜单中,Go 排名第七。与其他所有编程语言一样,有人喜欢 Go 语言也有人讨厌,同样的功能既会带来诋毁也会带来赞美。
InfoWorld 撰稿分析了开发人员喜欢或讨厌 Go 语言的 8 个原因,具体如下。
1、易于学习
Go 的设计者特意打造了一种易于学习的语言,没有太多复杂的功能或特异之处。
喜欢的点在于:对于新程序员和团队成员来说,更简单的语言更容易学习和掌握。由于老程序员可以很快学会 Go 的新技巧,因此项目人员配备也更容易。不仅如此,相关代码通常也更容易阅读。
讨厌的点在于:太过简单反而束缚了手脚。“一个女巫会选择一本简略的咒语书吗?四分卫会选择只有几个战术的战术书吗?一些程序员认为,用 Go 编程就像一只手被绑在背后。这种语言缺乏其他语言设计者向世界展示的所有聪明才智,而这是要付出高昂代价的。”
2、Go 不会偏袒任何一方
最初开发人员希望创建一种小型语言,为此他们牺牲了其他语言中许多受欢迎的功能。Go 是一种精简的语言,即可以满足用户的需求,又省去了一些繁琐。
喜欢的点在于:许多开发人员都称赞 Go 的简单性。Go 不需要他们掌握或保持数十种功能的专业知识才能熟练使用。
讨厌的点在于:每个人都有一些喜欢的功能和技巧,但 Go 很可能不提供这些功能和技巧。开发人员有时会抱怨,他们只需用 COBOL 或 Java 或其他喜欢的语言写一行代码,就可以完成在 Go 中可以完成的相同任务。
3、基于 C 的语法
Go 的设计团队确实基于传统 C 语言改进了一些缺陷,并简化了一些细节,使其看起来和感觉更现代。但在大多数情况下,Go 完全继承了始于 C 语言的传统。
喜欢的点在于:在 C 语言风格中成长起来的程序员会直观地理解 Go 的大部分内容。他们将能够非常快速地学习语法,并且可以花时间学习 Go 相较 C 或 Java 的一些改进之处。
讨厌的点在于:很多方面,Python 的设计都是与 C 截然相反的。对于喜欢 Python 方法的人而言,会觉得 Go 有很多让人讨厌的地方。
4、Go 的规则太多了
从一开始,Go 的创建者就希望不仅定义语法,还定义语言的大部分风格和使用模式。
喜欢的点在于:Go 的强惯用规则确保代码更容易理解,团队将减少对风格的争论。
讨厌的点在于:所有这些额外的规则和惯例都像束缚。“程序员在生活中拥有一点自由有那么糟糕吗?”
5、Go 有额外的错误处理
喜欢的点在于:Go 方法承认错误存在,并鼓励程序员制定处理错误的计划。这就鼓励程序员提前计划,并建立起一种弹性,从而开发出更好的软件。
讨厌的点在于:不必要的错误处理会让 Go 函数变得更长、更难理解。通常情况下,deep chain 中的每个函数都必须包含类似的代码,这些代码或多或少会执行相同的操作,并产生相同的错误。其他语言(如 Java 或 Python)鼓励程序员将错误"throw"到链上的特定代码块中,以"catch"它们,从而使代码更简洁。
6、标准库
喜欢的点在于:当许多标准功能由默认库处理时,大多数代码更易于阅读。因为没有人会编写自己的版本,或争论哪个软件包或第三方库更好。
讨厌的点在于:一些人认为,竞争能更好的推动需求和创新。有些语言支持多个软件包来处理相同的任务,表明大家对此确实有着浓厚的兴趣和丰富的文化。
7、可执行文件的大小
Go 团队的目标之一是让部署 Go 程序变得更容易,他们通过将所有程序打包成一个可执行文件来实现这一目标。
喜欢的点在于:磁盘空间很便宜。当安装了不同版本的库时,在陌生的位置部署代码可能是一场噩梦。Go 开发人员只需构建一个可执行文件就可以节省大量时间。
讨厌的点在于:我的磁盘上有多少份 Go 库?如果我有 100 个程序,那就意味着 100 份。在某种程度上,效率是一个考虑因素。没错,磁盘空间比以往任何时候都便宜,但内存带宽和缓存仍然是影响执行速度的首要问题。
8、巨头谷歌
Go 由谷歌开发,这家大公司一直是 Go 的主要支持者之一。大多数情况下,Go 开发工作都直接来自 Google 内部。
喜欢的点在于:如今,大量的工作涉及为服务器和客户端编写代码,而这类工作在 Google 的工作量中占了很大一部分。如果 Go 对谷歌有利,那么对我们这些以同样方式工作的人也有好处。如果谷歌的工程师们能开发出自己喜欢的东西,那么任何有类似项目的人都会同样喜欢它。
讨厌的点在于:这并不是说人们不喜欢谷歌本身,而是程序员不信任中央集权机构。供应商锁定和缺乏控制等问题,对任何试图管理技术堆栈的人来说都是严重的问题。谷歌的慷慨仍然让程序员们心存疑虑,尤其是当其他语言都拥有了围绕它们构建的庞大的开源社区。