为什么学 Go(二)
本文转自“雨夜随笔”公众号,欢迎关注
为什么学Go"是一系列文章,这里并不介绍如何学习Go,很多同学最近在问我要不要学Go。这是一个很大的问题,就是我为什么学Go?Go究竟是什么东西?带着这些疑问,我们先去了解Go和它背后的故事。
在 为什么学Go(一)中,我们讲述了Go语言的历史和发展。那么今天让我们先来看一下网上对于Go语言的一些评论,他们究竟在说什么?对于想要学习Go的人来说又意味着什么?
知乎
我们这里先来看一下知乎的一些评论。这里我们先不涉及Go中的语言细节,选取一些语言细节外的回答。具体的语言细节我们会在后面的文章进行详细说明。
为什么要使用 Go 语言?Go 语言的优势在哪里? - PingCAP的回答 - 知乎 https://www.zhihu.com/question/21409296/answer/1210793633
这个问题的高赞回答说了Go编程的基本感觉,那就是总体实现较为完善。Go在设计中考虑了开发人员的不同学习层次,原生实现了很多常用的库,比如net,io等。并且尽量采用简单的设计使得Go代码阅读起来较为简单,所以在简单上手Go语言后,你基本可以阅读大部分Go代码。这也是Go的设计理念之一:让代码编写更加简单易用,给编程思想更多的空间。
部分人物的评论
对 Go 语言的综合评价 - 王垠
不知道王垠的人可以先简单了解一下这个人,这个人主要研究编译器和语言设计领域。在程序员中也算是个很有名的大佬。经常会喷各种语言和设计,王垠的这篇文章其实很好的总结了网上对Go语言不满的地方。那就是在后面使用Go语言,特别是有Java语言经验的人会发现Go的很多设计并不是很好。比如没有泛型和重载。
这和我们上一篇文章说的Go的发展是一样的,那就是Go一开始只是为了减少Google内部的开发工作。所以Go的很多取舍上严重依赖Google内部的开发流程。但是这并不代表就是不好的,Go官网也对这些问题都一一做了解答,很多回答的核心思想就是他们觉得没有必要。比如重载,Go核心开发者认为这个会引入代码复杂度,因为使用者会不知道代码的具体结构。
第二是Go还很年轻,这个年轻主要是和Java比的,因为很多说Go不好的都会拿Java进行举例。我们知道Java发展到现在,已经成为面向对象设计语言的标杆,迭代了这么多版本后,很多设计也趋于成熟。就拿垃圾回收,Go还是Java初代的mark-and-sweep模型,而Java目前的垃圾回收模型已经升级到ZGC模型。所以当我们和这些成熟语言相比,Go还显得稚嫩许多。
第三是Go并没有发明语言,Go中的很多理念并不是在Go中得到第一次体现,都是源于其他先进的理念,比如并发的CSP模型(感兴趣的可以看一下我之前写的文章 并发神器CSP的前世今生)。Go的优势是以一种简单优雅的方式实现了。所以当我们看到网上很多疯狂吹Go的文章时,要清晰的认识到,其他语言也有很多很好的设计,Go并没有比他们先进多少,而只是根据Go简单易用的设计理念进行了优雅设计。
第四也是Go最为诟病的一点,那就是Google对Go的话语权很大,感兴趣的可以了解Go包管理工具dep vs go mod的故事。即使社区提供了很好的dep工具,Go语言的维护者依旧一锤定音推出了自己的go mod工具。是的dep的工作可以说是做了嫁衣。我们无法说这个一定是对的,但是Go开始设计的理念就是保证不同层次的开发者都能开发出稳定可用的代码。这个是把双刃剑,一方面保证了Go代码的可靠性,另一方面可能导致Go核心开发者权利过大,导致Go的发展受限。目前Go社区也在更改,未来如何,让我们拭目以待。
许式伟:我与Go语言的这十年
许式伟作为Go语言中国的布道师,这些年一直在推动Go语言在中国的发展。可以说Go语言在中国能够走进这么多人的视野离不开许工的一份努力。在这篇文章中许工说了自己使用Go的原因和感受。在考虑是否学习Go的同学也可以看一下这个文章。其实Go就像许工所说的一样,更像是Next C。Go一开始设计也是为了解决C,C++等后端语言开发中的弊端。所以Go目前流行的领域更多的是原来C,C++等语言的位置。Go目前和Java并不是同一等级,Java发展到现在,已经发展了非常成熟,各种面向对象的设计在Java中都有体现,在编写业务系统上可以说的老大的位置。Go目前还没到抢Java的位置。但是Java的发展也让Java有很大的历史包袱。Go由于发展和设计理念的问题,在这一块还有很大的潜力。所以在文章中所说的 下十年统治
这个说法我也很赞同。
总结
我们这篇文章简单说了一下网上目前对Go语言的评论,无论好的还是坏的,大部分说的都还是事实。我们要认识到Go不是个万能银弹,不是所有问题的解决方案。Go也有自己的局限和不足,但是这都不能掩盖他的设计理念的光辉。学习Go对我们来说不仅仅是学习了一门新语言,而是可以接触Go中很好优良的设计。而Go在这一方面做的很好,他让自己的语言变得简单易读,让我们更加易于理解和学习。在下一篇文章我们会说一下Go语言在这一方面的努力。
版权声明: 本文为 InfoQ 作者【soolaugust】的原创文章。
原文链接:【http://xie.infoq.cn/article/4a20bcae947d250e24bc547fd】。文章转载请联系作者。
评论