30 万人追更,年度重磅 Go 图书出版,百万流量博主带你学习 Go 底层原理

如果你学习 Go 语言,那你很大可能会搜索到这个人。他从 2015 年就坚持在自己的博客上输出好内容,博文超过 200 篇,其中有关 Go 语言的相关内容,更是获得 30 万人追更,阅读量超百万。
他就是“面向信仰编程”博客主理人左书祺(@Draven),左老师不仅文章更新频率高,内容质量过硬,人还特别低调。
直到我们的编辑老师,在茫茫博客中,找到了他。起初他将自己学习 Go 语言的过程和方法整理成文章,并形成了开源电子书《Go 语言设计与实现》。他的文章不仅深入剖析了源代码背后的原理,而且写得系统完整,内容丰富可读性高。而这个被 30 万人追更的电子书,如今正式出版了!

(博客“面向信仰编程”截图)
作者用了两年时间来打磨这本书。新书预售前 3 天销量破千。获得了极高的销量和关注度,读者豆瓣评分高达 9.5 分。是近期新书中,备受读者关注的一本。

如果你正准备学习 Go 语言,那就跟随我们的脚步来了解一下 Go 语言和左老师的书吧。
Go 语言的诞生和发展
说起 Go 语言,它是 2009 年诞生,至今已发展了 10 多年。三位主要创始人 Robert Griesemer、Rob Pike 和 Ken Thompson 选择了极其简单的设计来设计这个语言,所以编程稍微有些经验的开发者就能在短时间内快速上手。

(选自谷歌,从左到右分别是 Robert Griesemer,Rob Pike 和 Ken Thompson)
其内置的 Goroutine 和 Channel 等特性也可以让开发者轻松利用机器上的多个 CPU。尽管 Go 语言本身的出身和设计都很优秀,但是这门语言要想走进更多人的视野,被广大开发者熟知,仍然需要一些契机。2010 年前后,容器技术作为基础设施开始登上历史舞台。2013 年,Docker 作为明星级容器开源项目发布,随后成为 Go 语言发展的重要助推器。Docker 社区选择 Go 作为开发语言让更多人看到了这门语言,并认识到:Go 有足够的能力实现生产级的应用程序。
目前的 Go 语言在国内外的社区都非常热门,Kubernetes、etcd 和 Prometheus 等框架都使用 Go 语言开发,热门的微服务架构和云原生技术也为 Go 语言社区带来了非常多的活力。
并且根据 HackerEarth 对来自 76 个国家和地区的 16000 多名开发者的调查显示,Go 成为 2020 年最受欢迎的编程语言。

(HackerEarth 的调查结果)
左书祺与 Go 语言

左老师在初中时就开始接触编程,起因是父母为了不让他沉迷游戏,给了他一本 C 语言的编程书看。初次接触编程令他震撼,在一个黑框里操作计算机完成特定指令,当时在他看来是一件很神奇的事情。
上大学后,他学习了 iOS 客户端开发。当时用 Objective-C 在手机上编写小程序。整个大学四年,他还学习了 Ruby、Lisp、Haskell 等编程语言。
2018 年,他开始真正学习和使用 Go 语言。刚开始接触 Go 语言时,他觉得 Go 语言的设计比较“简陋”而且表达能力低下,严重影响了开发效率,所以是有些排斥和拒绝的。
但是随着对 Go 语言的深入学习和理解,他的观念发生了很大的改变。Go 语言的简单性也有极大的好处,那就是由它编写的应用程序相对容易维护,就算是开发者对这门语言不熟悉,也大概率可以写出让其他人看得懂的代码。
Go 语言不是一门完美的编程语言,它在选择使用运行时解决调度和内存管理等问题的同时,一定会放弃执行上的部分性能。事实上,它的性能也确实无法与 C++ 匹敌。但它可以在保证性能的前提下,利用内置的代码格式化工具、依赖管理工具以及更快的编译速度解放工程师的生产力,让大家有更多时间思考业务逻辑,而不是如何管理依赖和编译程序。
为什么要写这本书
目前的市面上分析 Go 语言实现的书籍较少,多数的书籍都偏重于 Go 语言基础和实战。虽然目前有很多分析 Go 语言的博客,但是它们却都面临以下的两个问题:
大量博客会成段的展示源代码的实现细节,没有提供较好的可读性;
少部分博客的质量较高,它们对 Go 语言的一些模块讲解的比较深入,但是不够系统,不能形成足够丰富、完整的内容;
除了上述的这些原因之外,目前关心 Go 语言设计以及演进的博客和书籍比较罕见,然而理解 Go 语言的发展史是帮助我们深入理解语言的有效途径,我们不应该忽视这一过程。
一本 Go 语言学习者必读书

更易读的内容设置
●以图配文:全书包含近 200 幅全彩配图,核心知识点以源代码 + 解释文字 + 配图的方式展示。色彩丰富和清晰明了的配图能够提供更多上下文,帮助大家快速理解不同模块之间的关系和作用,进而深刻理解 Go 语言的实现细节。

●精简源代码:删减源代码中的无关细节,精准分析核心代码的实现逻辑,帮助大家翻越阅读 Go 语言源代码的障碍。
●注重演进:分析 Go 语言社区中贡献者对相关特性的讨论,并通过追踪提交了解代码的更新过程,一言以蔽之,通过历史的演进和社区讨论剖析设计背后的决策和原因,让大家知其然,更知其所以然。

内容简介
本书主要内容可以分成四个主要部分,共计 9 章内容:调试源代码、编译原理、数据结构、语言特性、常用关键字、并发编程、内存管理、元编程和标准库,几乎涵盖了 Go 语言从编译到运行的方方面面。书中的代码片段基于 Go 1.15。大家可以按照准备工作、基础知识、核心知识和进阶知识的划分顺序来学习。
下面以思维导图的方式展示了本书的主要内容。

各章内容简单介绍如下:
●第 1 章 调试源代码:介绍调试和编译 Go 语言源代码和中间代码的方法。
●第 2 章 编译原理:按照从词法分析、语法分析、类型检查、中间代码生成到机器码生成的顺序,介绍 Go 语言源代码的编译过程,为我们理解 Go 语言关键字和语言特性的实现打下基础。
●第 3 章 数据结构:介绍 Go 语言中最常见的容器数据结构,其中包括数组、切片、哈希表和字符串,会深入介绍切片的复制和扩容、哈希表的读写以及字符串的拼接等常见操作。
●第 4 章 语言特性:介绍 Go 语言中的函数调用惯例、接口的实现原理、反射的三大法则以及具体实现。
●第 5 章 常用关键字:介绍使用 Go 语言常用关键字时会遇到的一些现象,从编译原理和运行时两个角度分析它们的具体实现。
●第 6 章 并发编程:介绍 Go 语言并发编程中常用的结构和概念,例如上下文、同步原语、计时器、Channel 和调度器等。
●第 7 章 内存管理:内存管理是编程语言的重要组成部分,本章会分别介绍堆空间和栈空间的内存管理,前者会从内存分配器和垃圾收集器两个维度介绍。
●第 8 章 元编程:介绍 Go 语言的元编程能力,教大家通过插件系统和代码生成达到使用更少代码实现更多功能的目的。
●第 9 章 标准库:介绍 Go 语言的常见标准库,涉及 JSON 解析、HTTP 请求和响应处理、数据库操作,通过学习标准库了解 Go 语言更多的使用技巧。
通过阅读本书,读者不仅能够深入理解 Go 语言的实现细节,而且可以深刻认识设计背后的原因,同时提升阅读源代码的技能。

大佬推荐
最早接触 Draven 是发现 GoCN 社区的很多 Gopher 在转发他的公众号文章,里面有不少内容是关于 Go 的细节实现和原理的,得到了大量 Gopher 的认可和喜爱。后来得知 Draven 以开源书的形式详细地展现了 Go 的整个实现和原理,图文并茂的讲解方式为 Gopher 所津津乐道 。非常高兴看到这本书终于出版了,期待成为 GoCN 社区的一本经典之作。
一一谢孟军,GoCN 社区创始人、积梦智能 CEO
早在研究 Go 运行时原理的时候,我就读到过 Draven 的文章,可谓内容丰富、图文并茂。我想他应该是花了大量时间钻研,才能以一种比较简单的方式把复杂的原理和实践代码的优化讲清楚。强烈推荐一读,对于大家后续业务研发、系统研发都有参考和借鉴意义。了解原理才能走得更远!
一一毛剑,bilibili 基础架构部负责人
《Go 语言设计与实现》比较详细地讲解了 Go 语言的各个知识点,对于 Gopher 体系化梳理 Go 语言的原理和用法有比较大的帮助!
一一万俊峰 Kevin,go-zero 作者
希望这本书中关于 Go 的总结和思考,不仅能够帮助你掌握 Go,也能帮助你深入理解为什么它会成为设计与实现现代容器系统、控制平面甚至 laC 系统的首选。
一一张磊,CNCF TOC 成员
翔实的逻辑表达、深入的技术钻研和精彩的配图呈现,让这本书在众多图书中脱颖而出!本书不仅是不可多得的技术提升读物一一非常适合从应用开发转型或者期待加深语言底层理解的 Go 爱好者阅读,也非常适合收藏。
一一无闻

版权声明: 本文为 InfoQ 作者【图灵教育】的原创文章。
原文链接:【http://xie.infoq.cn/article/78829f131d68524ad08572c86】。文章转载请联系作者。
评论 (1 条评论)