Go语言高级编程
上QQ阅读APP看书,第一时间看更新

前言

我从2016年就开始计划写作本书。2016年底因为开始学习The Go Programming Language临时搁置了写作。到了2018年决定重启,经过约半年的艰苦写作,2018年8月本书初稿终于完成。在本书初稿完成之际,Go 1.11也正式发布。Go 1.11开始对WebAssembly和模块提供支持,这两个改进将成为“后Go 1时代”最大的亮点。

其中WebAssembly是第一个Web汇编语言和虚拟机标准,Go语言对WebAssembly的支持是Go语言团队和GopherJS开源社区共同努力的成果。根据Ending定律,一切可编译为WebAssembly的,终将被编译为WebAssembly。由于篇幅和时间的原因,本书没有涉及Go语言和WebAssembly相关的主题。感兴趣的读者可以参考作者编写的《WebAssembly标准入门》,其中有专门章节讨论Go语言在WebAssembly平台的使用。

模块化也称为包依赖管理,是管理任何大型工程必备的工具。Go语言自发布10年来一直缺乏官方的模块化工具。同样在2018年,作为Go语言团队的技术领导人Russ Cox终于出手,重新设计了称为最小版本选择的包依赖管理的规则并提交了提案。模块化的特性已经被试验性地集成到Go 1.11中,并将在后续版本中逐渐转化为正式特性。模块化的特性将彻底解决大型Go语言工程的管理问题,至此Go 1除了缺少泛型等特性已经近乎完美。

在后Go 1时代过去之后将是新兴的Go 2时代!大约在2012年前后,作者曾乐观估计Go 2将在2020年前后到来,并可能带来大家期盼已久的泛型特性。最近官方已经发布了Go 2的设计草案,其中包含了令人惊喜的泛型特性和更好的错误处理流程等诸多改进。需要说明的是,官方已经通过博文表明Go 2将保持对Go 1软件资产的最大兼容。在本书即将出版之际,作者乐观预测Go 2将在2020年正式进入开发流程,并在2022年前后进入工业级生产环境使用,而Go 1将在2030年前后逐渐退出历史舞台。为了在Go 2到来时轻装上阵,我们更需要提前夯实在Go 1中尚未学习的基础知识,而本书正是在为此目标做准备。

本书第1章简单回顾Go语言的发展历史;第2章和第3章系统介绍CGO编程和Go汇编语言的用法;第4章对RPC和Protobuf技术进行深入介绍,并讲述如何打造一个自己的RPC系统;第5章介绍工业级环境的Web系统的设计和相关技术;最后的第6章介绍Go语言在分布式领域的一些编程技术。

最后,我们也是Go语言爱好者和学习者,虽然我们尽了最大努力,但是不足之处依然难免。欢迎大家提出改进意见。

柴树杉

2019年5月于武汉光谷