附录A 后记
04-13Ctrl+D 收藏本站
Go语言的作者们对一些主流的编程语言进行了深刻的反思,试图识别哪些语言特性是有价值的和有助于提高生产率的,以及哪些特性是多余的甚至是降低生产率的。再基于他们加起来已经有好几十年的编程经验进行总结分析,最终产生了全新的Go编程语言。
与传统的Objective-C和C++相比,Go语言是面向对象的“更好的C”。像Java一样,Go语言有自己的语法,所以它不必像Objective-C和C++那样来兼容C语法。但是和Java不同的是,Go语言是静态编译的,因此也不会受限于虚拟机的速度。
Go语言除了以抽象接口类型和优雅的支持聚合和嵌入的结构类型支持面向对象的全新方式外,也支持函数字面量和闭包等高级特性。同时 Go语言内置的映射和切片能够满足绝大多数数据结构的需要。Go语言的Unicode字符串类型使用行业的事实编码标准UTF-8,而且标准库完美支持字节流和字符。
Go语言的并发支持是非常优秀的,它使用轻量级的goroutine和类型安全通道(和锁等不同的是,通道不是底层的数据结构)。与其他的编程语言(如 C、C++、Java 等)相比,在 Go语言里创建并发程序要容易得多。而且 Go语言闪电般的编译速度特别适合那些构建大型 C++项目或者库的开发人员。
目前Go语言已经被商业或非商业组织广泛使用,Google内部也使用Go语言,,Google App Engine(code.google.com/appengine/docs/go/ overview.html)上已可以使用Go语言开发Web应用,之前只支持Java和Python。
这门语言目前仍然在快速进化,不过因为有go fix这样的工具,我们可以很容易地将现有的代码升级到最新版本的Go语言。而且,Go语言开发者打算让所有Go语言的1.x版本向后兼容1.0版本,以使Go用户能够拥有一门又稳定又在持续进步的开发语言。
Go语言的标准库非常广泛,但即使它也不满足我们的需求时,我们还可以看看 Go Dashboard(godashboard.appspot.com/project)能否找到我们需要的,或者我们可以使用其他语言编写的第三方库。要了解Go语言的最新消息可参考golang.org,这个网站有最新的文档、语言规范(很容易看懂)、Go Dashboard、博客、视频和一些其他支持文档。
大部分学习Go语言的程序员都有一些其他编程语言的背景,例如C++、Java、Python等,因此在学习Go语言时通常都已经形成了基于继承模型的面向对象思维。Go语言刻意地不支持继承,所以通常在C++或者Java之间进行代码转换时相对容易,但如果要转换为Go语言,我们最好回到最开始去理解这段代码的目的是完成什么,而不是当前是怎么做的,然后再用 Go语言完全重写。也许最重要的不同之处在于支持继承的语言允许将代码和数据混合在一起,而Go语言强制它们分离。分离的好处就是提供了极大的灵活性,更适合于创建并发程序,这对于那些从支持继承的语言过来的程序员,可能要花费一些时间和实践来适应。Go语言的一位核心开发者Russ Cox说:
“很不幸的是,每次有人问我关于继承的问题的时候,我总是回答‘可以啊,使用嵌入就行’。其实嵌入很有用,也是继承的一种方式,但是很多人都没想到这一点。我的看法是:你还在用C++、Python、Java、Eiffel或其他的语言思考方式,停下来,用Go语言的方式思考。”
Go语言是一种学习和使用起来都很令人着迷的编程语言,编写Go语言的代码是一种享受。Go语言开发者会发现加入Go邮件列表对他们很有帮助,因为这个列表拥有很多优秀的发言者,是最适合讨论和咨询问题的地方(groups.google.com/group/ golang-nuts)。由于Go语言以开源项目的方式运作,你也可以选择成为 Go语言开发者,帮助维护、改进和扩展 Go语言本身(golang.org/doc/contribute.html)。