序二
说起Go语言,大家会不自觉地将其与C语言比较,普遍认为“Go=C+GC+Goroutine”,同时也将其称为“云计算时代的C语言”,在开发效率和运行效率之间取得了绝佳的平衡。Go语言既适应互联网应用的极速开发,又能在高并发、高性能的开发场景中如鱼得水。从近几年的发展趋势来看,Go语言已经成为云计算、云存储以及区块链时代最重要的编程语言。
我大概是从2010年开始接触Go语言,当时Go也刚开源没多久,相关的资料只有官方文档和源代码,通过一次偶然的机会,我认识了柴树杉,我们一起组织和翻译了Go的官方文档以及源代码注释,为Go语言在国内的推广做了微薄的贡献。
历经数年的发展,Go语言已今非昔比,在各领域都不乏成功案例。说到Go语言最先想到的开源项目就是Docker和Kubernetes,而在国内几乎所有的著名互联网公司都在使用Go。最早使用Go的七牛,以及头条、滴滴、美团、小米、链家等后起之秀都在使用Go语言重构,BAT更不用说,在这些公司的业务中,Go都能在某方面占有重要的位置。例如:百度的BFE(统一接入前端)使用Go语言重构,日请求量达千亿级,百度内部还针对Go语言单独开发了一系列开发工具,例如,GDP(Go Develop Platform)是百度Go业务开发平台,面向全百度的在线业务支撑平台。
我在读本书的时候,深深地体会到两位作者扎实的基本功和丰富的实战经验。本书面向想要深入了解Go语言各种高级用法的开发人员,适合有一定Go语言基础的人阅读。
本书的第1章是语言基础,主要介绍了Go语言的发展历史。作者从简单的“Hello, World”程序,详细分析了Go语言各个前辈的演变过程,从而帮读者更直观地了解Go语言的发展历程。还通过简单的生产者/消费者模型,通俗易懂地诠释了Go语言的并发编程哲学的口号:“Do not communicate by sharing memory;instead,share memory by communicating.”(不要通过共享内存来通信,而应通过通信来共享内存)。
第2章和第3章主要从CGO和汇编入手,详细讲解了如何通过Go语言来调用C/C++实现的类库,从而丰富Go语言的基础库。同时了解Go语言汇编可以更容易地理解Go语言中动态栈、接口等高级特性的实现原理。
随着微服务架构的盛行,各种RPC相关的架构也脱颖而出,第4章从Go语言标准库自带的RPC入手,一步步地实现了一个Watch(监视)功能的接口。除了标准库里面的RPC,这一章还详细讲解了谷歌推出的gRPC框架,并基于gRPC实现了一个双向流特性的发布和订阅系统。
第5章主要以典型的开源Web框架为例,深入解释Router(路由)和Middleware(中间件)的执行过程以及相关原理,通过熟读和理解这一章的内容,读者可以使用标准的HTTP库实现自己的轻量级Web框架。同时这一章也介绍了实际Web开发过程中的一些问题,以及在Go语言中如何面对并解决这些问题。
众所周知,Go语言在高并发、通信交互复杂、重业务逻辑的分布式系统中非常适用,具有开发体验好、服务稳定、性能高等优势。因此,本书最后的第6章通过解决分布式开发过程中的问题,来讲解Go语言在分布式开发过程中的实践。
最后,希望读者能通过本书了解Go语言的一些高级用法,并可以应用在自己的实际项目中。同时希望读者在享受Go语言开发带来的乐趣并获得收获的同时,能回馈融入社区,一起推动社区的建设和发展。
边江,百度资深工程师
2019年5月于北京