Go 语言作为一种新颖的编程语言, 它最初是由谷歌为了服务器开发而发明出来的。 而它的发明者们,更是数位成就卓绝、技艺非常的计算机科学泰斗:像是Ken Thompson和Rob Pike这对老朋友。 我最近刚发表的一个重要的产品就使用了Go开发,从开发者产出效率和产品表现来说,Go语言很好地证明自己在这些方面的优越特性。也正因为如此,我所知的其它许多开发团队也在准备Go to "Go" (噢,这语言的名字是有多灵动啊!)。
仔细想想看,你要多久才能遇到一项编程创新同时兼顾了开发效率以及计算性能?
在讨论GO语言之前,我想谈谈为什么我会喜欢上Ta. 我是在2001年开始开发小型网页应用,并开始接触各种各样的语言。 那时我是C++的绝对忠实粉丝。 到了在2004年,我开始接触PHP(非面向对象)。但没多久,我就讨厌PHP了。尤其是在没有运行程序前,我根本不能捕捉任何的错误。就在那时,我认识到以下两个编程概念非常重要:
1. “面向对象”只是一种编程方式,而并非唯一的方式。 而且有时候,它未必是最好的选择。
2. 标量(整形,字符,字符串,浮点型,布尔类型),序列(列表、数组)和映射(名值对)这些语言内置类型,其实已经基本满足大部分的数据结构需求。
PHP用于小型应用的创作场景是绝对没得说。但是它难于测试,难于调试(太多的隐式类型转换)还有就是太慢。当我想暂时脱离PHP的时候,我在2007年和Java偶遇了。 Java也许是我遇到过的最令人郁闷的语言。Java太严格,太无意义(换句话说太冗余)还有太“庞大”,包括各种的IDE,框架,编译环境配置等等。 需要完成繁琐的配置,我们才能开始开发。同时,我并不接受JVM(Java 虚拟机)的思想。它虚幻的便携性会带来沉痛的代价。2008年,我开始接触 Python。5年前我曾经用Ta小试牛刀,但现在我是全身心的投入其中。我喜欢Python。 它支持多范型,语言很有语义,有很多亮点的东东,例如列表解析,生成器表达式,装饰器,关键字参数(**kwargs)等等。 它语义清晰,设计紧密。它的强大力量,在写代码-运行-修正-运行的过程中表现的淋漓尽致... 开发周期中经常无需迭代。用Python写的代码经常比其他语言写的,更能按着我的意图去运作。
可是,Python有个突出的问题,就是它速度不快。我使用过Psyco这样的优化器,但是效果还不够理想。然后又尝试了Unladen Swallow优化器,可也不够理想。
在我开始用Python的时候,我发现Google对Ta情有独钟。 Python之父 --Guido van Rossum就是就职于Google. 过了一段时间,我听到了一个来自Google的新语言诞生了 -- Go.如果Go背后不是借助与名声赫赫的Rob和Ken,和诞生于世界上最伟大的IT公司,这个项目也许就在实验阶段就被解散了。
2009年Go语言发布的时候,我并未觉察到为什么它如此伟大,除了知道Go包含很多现代语言的结构和运行速度很快。
现在让我们先暂停一下思路,换一个话题。
在2010年末,当时我刚刚在Zynga工作,重新由Python转去使用php而使我有点时间。所以我花了一点时间去读了一些东西。其中在我读过的书中有一本书,在该书中一些讨论中,介绍了这样的一种概念:“数据流编程”(dataflow programming)和“声明式并发”(declarative concurrency).你可能需要通过前面的链接,去简单了解一下这个概念,因为这就是Go语言的核心特征。
在我学习数据流编程时,我想起在yahoo的时候,当要并行地从多个数据源获取数据时,它是一个多么庞大的协定,有一些解决策略比如:最快源获胜(fastest-source-wins)、N/M响应(wait-until-N-of-M responses),它们都有自己的超时处理等等。标准的方案是用一个带XML文档的Java守护进程去描述你想要的数据流。这种方法不是太优雅。我希望有一种语言本身就具有这种能力,并且不要像Oz语言那样学院派。那时我没有认识到Go语言就是我想要的。
去年年初一段时间,我们讨论并尝试寻找其他比PHP更为具体、性能更出色的编程语言--编译型语言。去年年中,当我再一次去了解Go,发现它已经拥有Google大量的支持并且以已经发布了1.0版本的GA版本时,我们在构思一个新的需要处理并发的项目。PHP的无共享架构并不能很好地支持项目所需。我想,现在是个好时机去使用Go语言来突破。
在使用Go开发一些项目原型后,我有了更确切的实践感受:
某些 Go 语言的特性你只有在产品中才能体会,我真正喜欢 Go 语言的几个方面如下:
总之,我发现Go是迄今为止最好用的sever端编程语言,它具有Python语言优雅性和C/C++高性能的优点,退一步来说,即使它只具有Python 90%的易用性和C/C++ 90%的高性能,那也是不错的,而且它的优点不止这些:1)基于Go语言的程序比其他语言更容易在异构平台和虚拟环境下进行开发和部署;2)Go语言有利于分享和协作开发,因为它有单一的标准、精简的语言特性。
注:
翻译转自http://www.oschina.net/translate/why-program-in-go
原文转自http://tech.t9i.in/2013/01/why-program-in-go/