这篇文章虽然不长,但是很有趣。看到好几天了,一直都没空翻译。抽空翻译出来,这应当算是英文“标题党”和“高级黑”吧。
原文不好读,也没什么特别的;不过如果是为了强化学习 Golang 的信心,值得看看。
原文在此:http://aeronotix.pl/blog/go-is-boring
—————-翻译分隔线—————-
无聊的 Golang
Go 没什么新鲜的,也没什么特别的。你在看到 Go 之前都遇到过了。是的,我也是这么认为的。不过你所没见过的是所有这些都集中在一个语言中,产生了一个 TMD 超级有用的核心。
你之前已经用过 channel 了,很酷吧。纯粹为了获得那么一点点的性能提升就用在各个地方,并且期望能够在新语言中集成。你精通线程、携程、actor、future 和 promise。你叫起来、走起来、说起话来都像个鸭子(译注:鸭子类型)。但是你(可能)从未将这些事情放在一起。而这就是 Go。Go 全部是关于我们已经深入了解的那些东西,参和参合在一起。Go 试图消除语言中糟糕的那部分东西,或着或者移除主要的部分(或者至少尝试提供更好的选择)。
当发挥静态类型优势的同时,也可能写出该死的冗长代码。你需要为编译器设定每个变量的类型,辛勤的(向计算机)解释每个部分最终接受和返回什么。这真是令人厌恶,而且完全可以避免。通过 literal 语法或者函数创建各种基本类型,或其他特殊的语法。那么为什么我们还需要使用特殊的语法来告诉编译器使用什么类型来创建?不需要。类型推断。Go 有一个类型推断符号(:=)可以在编译时推导出类型,从而节约你宝贵的击键次数。这不是什么新玩意儿,一大堆语言可以做到。
有用且轻量的面向对象编程。有一大堆 C++ 样式的语言使得类看起来像是编程中最终的王者。所有的类型必须巧妙的进行分类和摆放,以便创建一个分类学集锦,一个你代码中所有工作的对象的分类学博物馆。这是提供给普通操作的愚蠢的盛大仪式所需要的东西…必须要做的东西。名词是东西,名词调用动词。就是这么简单。编程形式上也不应当有特殊的东西。这带来了确定的好处。它在同一个数据上封装了若干操作是很好的(动词作用在名词上),这有着不错的语义上的用途(x 是一个 y)但这不是任何地方都能用到。地狱啊,我已经写过许多 web 后端的东西,不过我已经没有写过 Python 的类大概有…3 个月了。许多语言都对 OOP 做了让步,这“只是另一个范式”,这是对的。这没什么新鲜的。
并发是一等公民。这是个壮举。我不再需要找遍整个标准库仅仅是为了找到一个不是那么符合要求的,古老的,吱吱嘎嘎作响的模型。我也不需要使用像线程、join 和其他混乱的烦人东西,用同样乏味的方法让程序并发。Go 就运行就是了。我请求一个并发的例程,就获得一个该死的并发例程。这使得像我这样低级的程序员也能使用并发。这没什么新鲜的。
我想我的观点是,Go 看起来没什么新鲜的。看起来可以在其他任何地方获得这些特性,而无需学习一门全新的语言。你无法同时获得它们。至少这是语言中的 DNA。
参和->掺合
或着 ->或者
为什么channel一定要用make函数分配内存,c := make(chan int)而不能使用 var c chan int = 0呢?