原创分享 系统学习 Go 语言,有这几本书就够了!

bigwhite-github · 2020年11月06日 · 195 次阅读

img{512x368}

1. Go 语言的发展现状

如果从2007年9月20日那个下午三个 “程序员大佬” 在谷歌总部的一间办公室里进行的一次有关设计一门新编程语言的讨论算起,那么 Go 语言已经度过了自己的13 个年头了。

img{512x368}

Robert Griesemer、Rob Pike 和 Ken Thompson

如果从2009年11月10日Go 语言正式开源发布算起,Go 语言也即将迎来自己的第 11 个生日

img{512x368}

2020 年,Go 联合创始人 Rob Pike 在专访中也认可了Go 确实已成为云基础架构的语言。在 Go 即将迎来自己的 11 个生日的时候,Hacker News 有人发起了“Go 已超过 10 岁了,你觉得这门语言如何?”的提问,收到了广泛的关注和回答。国内媒体将这些问答整理后得到的结论是:“人生苦短,我要换 Go”

Stackoverflow 官博 11 月 2 日发表的《Go 语言有哪些优点?探讨导致 Go 语言日益流行的特征 》一文对 Go 语言的发展趋势描述的贴切:Go 语言就像爬行的藤蔓,虽缓慢,但却逐渐占据了开发世界。它正以一种郁郁葱葱的并且在许多方面都很优越的编程能力覆盖着在它之前出现的所有事物img{512x368}

不管你是否承认,Go 在 IT 就业市场已经成为事实上的 “香饽饽” 之一,就像一贯不激进的慕课网也在今年双 11 打出了下面的专题:

img{512x368}

上车,任何时间都不晚! 那么怎么才能踏上 Go 这一强大且稳健前行的车呢?和其他主流编程语言一样,上车的必经之路:看书

2. 市面上的 Go 书籍为何这么少

和 C、C++、Java、Python 等编程语言在市面上的书籍数量相比,Go 流行于市面(大陆)上的图书似乎少了很多。其原因笔者觉得有如下几点:

1) 年轻

我们来看看上述几门主流编程语言的诞生时间:

  • java 1995

  • c 1972

  • c++ 1983

  • python 1991

对于很多 IT 从业者来说,这些语言诞生的时候他们还没出生呢。而 2009 年末才正式发布的 Go 和 “最年轻” 的 java 之间还有 14 年的 “年龄差”。

Go 在国内真正开始快速流行起来大致在 2015 年第一届 GopherChina 大会 (2015.4 月) 之后,当时的Go 是 1.4 版本)。同一年下半年发布的Go 1.5实现自举并让 GC 延迟大幅下降,这引爆了 Go 在国内的流行。一批又一批程序员成为 Gopher,在大厂、初创实践着 Go 语言。但知识和技能的沉淀和总结需要时间,相信再有 5 年,国内作者出版的 Go 语言相关书籍会像雨后春笋版出现在大家的书架上。

2)以品类代名词的身份占据的 “领域” 还少

提到 Web,人们想到的是 Java spring;提到深度学习、机器学习、人工智能,人们想到的是 python 和 tensorflow;提到比特币,嵌入式,人们想到的是 C;提到游戏,人们想到的是 C++;提到前端,人们想到的是 Javascript。这些语言在这些垂直领域早早以杀手级框架入场,使得它们成为了这一领域的 “品类代名词”,因此与该垂直领域相关的技术书籍都会采用作为该领域 “品类代名词” 的编程语言编写书中示例等,这样的书也就会被归类为这类语言方面的书籍。

Go 语言诞生晚,入场也较晚。Go 虽然通过缓慢的 “爬行”,覆盖了一些领域并占据优势地位,但还不能说已经成为了该领域的 “品类代名词”,比如:云原生、API、微服务、区块链等,因此被垂直领域书籍关联的机会也不像上面那几门语言多。

同时,由于 Go“自带电池”,基于 Go 标准库我们可以实现大部分功能特性,无需依赖过多框架。即便依赖框架,框架本身也不复杂,很少以 “某某框架” 为主题编写一本技术书籍,这方面远远无法媲美 Java 和 Spring 这对 “黄金组合”。

3) 引进国外优秀作品需要时间

相对于国内,国外关于 Go 语言的作品要多不少,但引进国外图书资料需要时机以及时间 (找译者翻译)。

3. 系统学习 Go 语言的书籍列表 TOP 5

笔者接触 Go 语言较早,Go 语言相关的中外文书籍几乎都通读过一遍(经典好书读过可不止一遍哦)。Go 语言比较简单,如果单单从系统掌握这门语言的角度来看,阅读下面基本书籍就足够了。如果你要学习某些垂直领域的 Go 应用和技巧,那么期待我后续对垂直领域 Go 书籍/资料的推荐吧^_^。

这里参考 “天下足球” TOP10 栏目的方式推荐我心目中掌握 Go 语言必读的五大好书(每项满分为 5 分)!

第五名:《The Way To Go》 - Go 语言百科全书

img{512x368}

《The Way To Go》是我早期学习 Go 语言时最喜欢翻看的一本书。该书成书于 2012 年 3 月,恰逢 Go 1.0 版本刚刚发布,作者承诺书中代码均可在 Go 1.0 版本上编译通过并运行。该书分为 4 个部分:

  • 为什么学习 Go 以及 Go 环境安装入门

  • Go 语言核心语法

  • Go 高级用法(读写、错误处理、单元测试、并发编程、socket 与 web 编程等)

  • Go 应用 (常见陷阱、语言应用模式、从性能考量的代码编写建议、现实中的 Go 应用等)

每部分的每个章节都很精彩,这本书也是目前见到的最全面详实的讲解 Go 语言的书籍了,我称之为 Gopher 们的第一本“Go 百科全书”

该书作者 Ivo Balbaert 想必大多数人都不曾耳闻。为了写本文,我特地研究了一下他的作品以及出版时间,发现这个技术作者是很会 “抢先机” 并且眼光独到。他总是能发现市面刚出现不久但却很有潜力的编程语言并在其他人了解该门语言之前,就编写出类似 “The way to Go” 这样的为早期语言接纳者提供的详实资料,包括JuliaRust等。在很多人还不知道这些语言名字的时候,他就已经开始学习这些语言,并为这些语言编写出质量很高的 “百科全书” 式的书籍。

很遗憾,这本书没有中文版。这可能是由于本书出版太早,等国内出版社意识到要引进 Go 语言方面的书籍时,这本书使用的 Go 版本又太老了,虽然本书中绝大部分例子依然可以在今天最新的 Go 编译器下通过编译并运行起来。不过无闻在 github 上发起了这本书的中译版项目https://github.com/Unknwon/the-way-to-go_ZH_CNgopher 可以去在线或下载阅读。,感兴趣的 此书虽棒,但毕竟年头 “久远”,我只能委屈它一下了,将它列在第五位,下面是其各个指数的评分:

  • 作者名气指数:3

  • 关注度指数:3

  • 内容实用指数:4

  • 经典指数:4

总分:14

第四名:《Go 101》 - Go 语言规范全方位解读

img{512x368}

这是一本在国外人气和关注度比在国内高的中国人编写的英文书,当然也是有中文版的。

如果仅从书名中的101去判断,你很大可能会认为这仅仅是一本讲解 Go 入门基础的书,但这本书的内容可远远不止入门这么简单。这本书可大致分为三个部分:

  • Go 语法基础

  • Go 类型系统与运行时实现

  • 以专题 (topic) 形式阐述的 Go 特性、技巧与实践模式

除了第一部分算是 101 范畴,其余两个部分都是 Go 语言的高级话题,也是要精通 Go 必须要掌握的 “知识点”。并且,结合 Go 语言规范,作者对每个知识点的阐述都细致入微并结合大量示例辅助说明。我们知道有关 C 和 C++ 语言,市面上有一些由语言作者或标准规范委员会成员编写的 annotated 或 rationale 书籍(语言参考手册或标准解读),Go 101 这本书也可以理解为Go 语言的标准解读或参考手册

Go 101 这本书是开源电子书,其作者也在国外一些支持自出版的服务商那里做了付费数字出版。这使得这本书相对于其他纸板书有着另外一个优势:与时俱进。在作者的不断努力下,该书的知识点更新基本保持与 Go 的演化同步,目前其内容已经覆盖了最新的Go 1.15 版本

该书作者为国内资深工程师老貘,他花费三年时间 “呕心沥血” 完成此书并免费奉献给 Go 社区,值得大家为其大大的点赞! 下面是本书推荐指数的评分:

  • 作者名气指数:3

  • 关注度指数:4

  • 内容实用指数:4

  • 经典指数:4

总分:15

第三名:《Go 语言学习笔记》 - Go 源码剖析与实现原理探索

img{512x368}

这是一本在国内影响力很大和关注度较高的作品。一来其作者雨痕老师是国内资深工程师,也是 2015 年第一届 GopherChina 大会讲师;二来,该作品的前期版本是以开源电子书的形式风险给国内 Go 社区的;三来,作者在 Go 源码剖析方便可谓之条理清晰,细致入微。

2016 年《Go 语言学习笔记》纸版书出版,该书覆盖了当时最新的 Go 1.5 版本,Go 1.5 版本在 Go 语言演化历史中的分量极高,它不仅实现了 Go 自举,还让 Go GC 的延迟下降到绝大多数应用可以将其应用到生产的程度。本书整体上分为两大部分:

  • Go 语言详解:以短平快、捞干的来的风格对 Go 语言语法做了说明,能用示例说明的,绝不用文字做过多修饰。

  • Go 源码剖析:这是本书精华,也是最受 Gopher 关注的部分。这部分对 Go 运行时神秘的内存分配、垃圾回收、并发调度、channel 和 defer 的实现原理、syn.Pool 的实现原理做了细致的源码剖析与原理总结。

随着 Go 语言演化,其语言和运行时实现一直在变化,但 Go 1.5 版本的实现是后续版本的基础,因此这本书的剖析非常值得每位 Gopher 阅读。从雨痕老师的github上最新消息来看,他似乎在编写新版 Go 语言学习笔记,基于 Go 1.12 版本,剖析源码是枯燥繁琐的,期待新版 Go 学习笔记早日与 Gopher 们见面。 下面是本书各个指数的评分:

  • 作者名气指数:4

  • 关注度指数:4

  • 内容实用指数:4

  • 经典指数:4

总分:16

第二名:《Go 语言实战》 - 实战系列 (in action) 经典之作,紧扣 Go 语言的精华

img{512x368}

Manning 出版社出版的 “实战系列 (xx in action)” 一直是程序员心中高质量和经典的代名词。在出版 Go 语言实战方面,该出版社也是丝毫不敢怠慢,邀请了 Go 社区知名的三名明星级作者联合撰写了该书的内容。这三位作者分别是:

  • 威廉·肯尼迪 (William Kennedy) - 知名 Go 培训师,培训机构 Ardan Labs 的联合创始人,"Ultimate Go"培训的策划实施者。

  • 布赖恩·克特森 (Brian Ketelsen) - 世界上最知名的 Go 技术大会 - GopherCon 大会的联合发起人和组织者,GopherAcademy创立者,现微软 Azure 工程师

  • 埃里克·圣马丁 (Erik St.Martin) - 世界上最知名的 Go 技术大会 - GopherCon 大会的联合发起人和组织者

本书并不是大部头,而是薄薄的一本(中文版才 200 多页),因此你不要期望从本书得到百科全书一样的阅读感。本书的作者们显然也没有想将其写成面面俱到的作品,而是直击要点,即挑出 Go 语言和其他语言相比与众不同的特点进行着重讲解,这些特点构成了本书的结构框架:

  • 入门:快速上手搭建、编写、运行一个 go 程序

  • 语法:数组 (作为一个类型而存在)、切片和 map

  • Go 类型系统的与众不同:方法、接口、嵌入类型

  • Go 的拿手好戏:并发及并发模式

  • 标准库常用包:log、marshal/unmarshal、io(Reader 和 Writer)

  • 原生支持的测试

读完这本书,你就掌握了 Go 语言的精髓之处,这迎合了多数 gopher 的内心需求。本书中文版译者 Googol Lee 也是 Go 圈子里的资深 gopher,翻译质量上乘。

下面对本书各个指数的评分:

  • 作者名气指数:5

  • 关注度指数:5

  • 内容实用指数:4

  • 经典指数:4

总分:18

第一名:《Go 程序设计语言》 - 人手一本的 Go 语言 “圣经”

如果说由Brian W. KernighanDennis M. Ritchie联合编写的《The C Programming Language》(也称 K&R C) 是 C 程序员 (甚至是所有程序员) 心目中的 “圣经” 的话,

img{512x368}

那么同样由 Brian W. Kernighan(K) 参与编写的《The Go Programming Language》(也称tgpl)就是 Go 程序员心目中的 “圣经”。

img{512x368}

本书模仿并致敬 “The C Programming Language” 的经典结构,从一个"hello, world"示例开始带领大家开启 Go 语言之旅。第二章程序结构是 Go 语言这个 “游乐园” 的向导图,了解它之后,我们就会迫不及待地奔向各个 “景点” 细致参观。Go 语言规范中的所有 “景点” 在本书中都被覆盖到了,并且由浅入深,循序渐进:从基础数据类型到复合数据类型、从函数、方法到接口、从创新的并发 goroutine 到传统的基于共享变量的并发,从包、工具链到测试,从反射到低级编程 (unsafe 包)。作者行文十分精炼,字字珠玑,这与《The C Programming Language》的风格保持了高度的一致。书中的示例在浅显易懂的同时,又极具实用性并突出 Go 语言的特点(比如:并发 web 爬虫、并发非阻塞缓存等)。

读完本书后,你会有一种爱不释手,马上还要从头再读一遍的感觉,也许这就是 “圣经” 的魅力!

本书出版于2015年10月26日,也是既当年中旬 Go 1.5 这个里程碑版本发布后,Go 社区的又一重大历史事件!并且 Brian W. Kernighan 老爷子的影响力让更多程序员加入到 Go 阵营,这也或多或少促成了 Go 成为下一个年度,即 2016 年年度TIOBE 最佳编程语言。能得到 Brian W. Kernighan 老爷子青睐的编程语言只有 C 和 Go,这也是 Go 的幸运。当然了如果老爷子是被 Rob Pike 或 Ken Thompson 通过私人关系邀请写书的,那就另当别论了,当然这纯属臆测,别当真^_^。

这本书的另一名作者 Alan A. A. Donovan 也并非等闲之辈,他是 Go 核心开发团队的成员,专注于 Go 工具链方面的开发。

现在唯一遗憾的是 Brian W. Kernighan 老爷子年事已高,不知道Go 加入泛型后老爷子是否还有精力更新这本圣经。

该书中文版由七牛团队翻译,总体质量是不错的。建议 Gopher 们人手购置一本圣经 “供奉” 起来!^_^

下面对本书各个指数的评分:

  • 作者名气指数:5

  • 关注度指数:5

  • 内容实用指数:5

  • 经典指数:5

总分:20

4. 小结

Go 书籍绝非 “汗牛充栋”,预计 Go 增加泛型表达力增强后,市面上会有更多的技术书籍出炉。上面的某些经典也许还会出新版。而市面上 Go 书籍不多从另外一角度也可以理解成 Go 语言在国内还有巨大的发展空间与潜力。

努力吧,Gopher 们!


只有写书者,才能体会到写者的艰辛!Go 专栏:《改善 Go 语言编程质量的 50 个有效实践》也是我努力了一年多才打磨雕琢出来的心血之作。自从上线后,收到大家的热烈关注和好评!现在恰逢双 11 慕课大促,欢迎有意愿在 Go 这条技术路线上进阶的朋友们订阅,在学习过程中欢迎随时反馈和交流!

img{512x368}

微博:https://weibo.com/bigwhite20xx 微信公众号:iamtonybai 博客:tonybai.com github: https://github.com/bigwhite

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册