极客时间已完结课程限时免费阅读

加餐|我“私藏”的那些优质且权威的Go语言学习资料

加餐|我“私藏”的那些优质且权威的Go语言学习资料-极客时间

加餐|我“私藏”的那些优质且权威的Go语言学习资料

讲述:Tony Bai

时长17:56大小16.39M

你好,我是 Tony Bai。
学习编程语言并没有捷径,就像我们在开篇词中提到的那样,脑勤 + 手勤才是正确的学习之路。不过,留言区也一直有同学问我,除了这门课之外,还有什么推荐的 Go 语言学习资料。今天我们就来聊聊这个话题。
如今随着互联网的高速发展,现在很多同学学习编程语言,已经从技术书籍转向了各种屏幕,以专栏或视频实战课为主,技术书籍等参考资料为辅的学习方式已经成为主流。当然,和传统的、以编程类书籍为主的学习方式相比,谈不上哪种方式更好,只不过它更适合如今快节奏的生活工作状态,更适合碎片化学习占主流的学习形态罢了。
但在编程语言的学习过程中,技术书籍等参考资料依旧是不可或缺的,优秀的参考资料是编程语言学习过程的催化剂,拥有正确的、权威的参考资料可以让你减少反复查找资料所浪费的时间与精力,少走弯路。
这节课我会给你分享下我“私藏”的 Go 语言学习的参考资料,包括一些经典的技术书籍和其他电子形式的参考资料。
虽然现在编程语言学习可参考的资料形式、种类已经非常丰富了,但技术类书籍(包括电子版)在依旧占据着非常重要的地位。所以,我们就先重点看看在 Go 语言学习领域,有哪些优秀的书籍值得我们认真阅读。

Go 技术书籍

和 C(1972 年)、C++(1983)、Java(1995)、Python(1991)等编程语言在市面上的书籍数量相比,Go 流行于市面(尤其是中国大陆地区)上的图书要少很多。究其原因,可能有以下几个:
首先,我觉得主要原因还是 Go 语言太年轻了。尽管Go 刚刚过完它 12 岁的生日,但和上面这些语言中“最年轻”的 Java 语言之间也还有 14 年的“年龄差”。
其次,Go 以品类代名词的身份占据的“领域”还很少。提到 Web,人们想到的是 Java Spring;提到深度学习、机器学习、人工智能,人们想到的是 Python,提到游戏,人们想到的是 C++;提到前端,人们想到的是 JavaScript。这些语言在这些垂直领域早早以杀手级框架入场,使得它们成为了这一领域的“品类代名词”。
但 Go 语言诞生晚,入场也较晚。Go 虽然通过努力覆盖了一些领域并占据优势地位,比如云原生、API、微服务、区块链,等等,但还不能说已经成为了这些领域的“品类代名词”,因此被垂直领域书籍关联的机会也不像上面那几门语言那么多。
最后是翻译的时间问题。相对于国内,国外关于 Go 语言的作品要多不少,但引进国外图书资料需要时机以及时间(毕竟要找译者翻译)。
Go 在国内真正开始快速流行起来,大致是在 2015 年第一届 GopherChina 大会(2015 年 4 月)之后,当时的 Go 版本是 1.4。同一年下半年发布的 Go 1.5 版本实现了 Go 的自举,并让 GC 延迟大幅下降,让 Go 在国内彻底流行开来。一批又一批程序员成为 Gopher,在大厂、初创公司实践着 Go 语言。但知识和技能的沉淀和总结需要时间。
不过,2020 年开始,国内作者出版的 Go 语言相关书籍已经逐渐多了起来。2022 年加入泛型的 Go 1.18 版本发布后,相信会有更多 Gopher 加入 Go 技术书籍的写作行列,在未来 3 年,国内 Go 语言技术书籍也会迎来一波高峰。
我个人接触 Go 语言比较早,几乎把 Go 语言相关的中外文书籍都通读过一遍,其中几本经典好书甚至还读过不止一遍。所以这里我也会给你推荐几本我认为系统学习 Go 语言必读的经典好书。说实在的,Go 语言比较简单,如果单单从系统掌握这门语言的角度来看,阅读下面这几本书籍就足够了。
这几本书我按作者名气、关注度、内容实用性、经典指数这几个维度,分别打了分(每部分满分为 5 分,总分的满分为 20 分),按推荐性从低到高排了序,你可以参考下。

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

《The Way To Go》是我早期学习 Go 语言时最喜欢翻看的一本书。这本书成书于 2012 年 3 月,恰逢 Go 1.0 版本刚刚发布,当时作者承诺书中代码都可以在 Go 1.0 版本上编译通过并运行。这本书分为 4 个部分:
为什么学习 Go 以及 Go 环境安装入门;
Go 语言核心语法;
Go 高级用法(I/O 读写、错误处理、单元测试、并发编程、socket 与 web 编程等);
Go 应用(常见陷阱、语言应用模式、从性能考量的代码编写建议、现实中的 Go 应用等)。
每部分的每个章节都很精彩,而且这本书也是我目前见到的、最全面详实的、讲解 Go 语言的书籍了,可以说是 Gopher 们的第一本“Go 百科全书”
不过遗憾的是,这本书没有中文版。这可能是由于这本书出版太早了,等国内出版社意识到要引进 Go 语言方面的书籍的时候,这本书使用的 Go 版本已经太老了。不过,这本书中绝大部分例子依然可以在今天最新的 Go 编译器下通过编译并运行起来。好在 Gopher无闻在 GitHub 上发起了这本书的中译版项目,如果你感兴趣的话,可以去 GitHub 上看或下载阅读。
这本书虽然很棒,但毕竟年头“久远”,所以我也只能委屈它一下了,将它列在推荐榜的第五位,这里我也给出了对它的各个指数的评分:

第四名:《Go 101》- Go 语言参考手册

《Go 101》是一本在国外人气和关注度比在国内高的中国人编写的英文书,当然它也是有中文版的。
如果只从书名中的 101 去判断,你很大可能会认为这仅仅是一本讲解 Go 入门基础的书,但这本书的内容可远远不止入门这么简单。这本书大致可以分为三个部分:
Go 语法基础;
Go 类型系统与运行时实现;
以专题(topic)形式阐述的 Go 特性、技巧与实践模式。
除了第一部分算 101 范畴,其余两个部分都是 Go 语言的高级话题,也是我们要精通 Go 语言必须要掌握的“知识点”。并且,作者结合 Go 语言规范,对每个知识点的阐述都细致入微,也结合大量示例进行辅助说明。我们知道,C 和 C++ 语言在市面上都有一些由语言作者或标准规范委员会成员编写的 Annotated 或 Rationale 书籍(语言参考手册或标准解读),而《Go 101》这本书,就可以理解为 Go 语言的标准解读或参考手册
Go 101 这本书是开源电子书,它的作者也在国外一些支持自出版的服务商那里做了付费数字出版。这就让这本书相对于其他纸板书有着另外一个优势:与时俱进。在作者的不断努力下,这本书的知识点更新基本保持与 Go 的演化同步,目前书的内容已经覆盖了最新的 Go 1.17 版本。
这本书的作者是国内资深工程师老貘,他花费三年时间“呕心沥血”完成这本书并且免费奉献给 Go 社区,值得我们为他点一个大大的赞!近期老貘的两本新书《Go 编程优化 101》和《Go 细节大全 101》也将问世,想必也是不可多得的优秀作品。
下面是我对这本书各个指数的评分:

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

《Go 语言学习笔记》是一本在国内影响力和关注度都很高的作品。一来,它的作者雨痕老师是国内资深工程师,也是 2015 年第一届 GopherChina 大会讲师;二来,这部作品的前期版本是以开源电子书的形式分享给国内 Go 社区的;三来,作者在 Go 源码剖析方面可谓之条理清晰,细致入微。
2016 年《Go 语言学习笔记》的纸质版出版,覆盖了当时最新的 Go 1.5 版本。Go 1.5 版本在 Go 语言演化历史中的分量极高,它不仅实现了 Go 自举,还让 Go GC 的延迟下降到绝大多数应用可以将它应用到生产的程度。这本书整体上分为两大部分:
Go 语言详解:以短平快、“堆干货”的风格对 Go 语言语法做了说明,能用示例说明的,绝不用文字做过多修饰;
Go 源码剖析:这是这本书的精华,也是最受 Gopher 们关注的部分。这部分对 Go 运行时神秘的内存分配、垃圾回收、并发调度、channel 和 defer 的实现原理、sync.Pool 的实现原理都做了细致的源码剖析与原理总结。
随着 Go 语言的演化,它的语言和运行时实现一直在不断变化,但 Go 1.5 版本的实现是后续版本的基础,所以这本书对它的剖析非常值得每位 Gopher 阅读。从雨痕老师的GitHub上的最新消息来看,他似乎在编写新版 Go 语言学习笔记。剖析源码的过程是枯燥繁琐的,期待雨痕老师新版 Go 学习笔记能早日与 Gopher 们见面。
下面是我对这本书各个指数的评分:

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

Manning 出版社出版的“实战系列(xx in action)”一直是程序员心中高质量和经典的代名词。在出版 Go 语言实战系列书籍方面,这家出版社也是丝毫不敢怠慢,邀请了 Go 社区知名的三名明星级作者联合撰写。这三位作者分别是:
威廉·肯尼迪 (William Kennedy) ,知名 Go 培训师,培训机构 Ardan Labs 的联合创始人,“Ultimate Go”培训的策划实施者;
布赖恩·克特森 (Brian Ketelsen) ,世界上最知名的 Go 技术大会 GopherCon 大会的联合发起人和组织者,GopherAcademy创立者,现微软 Azure 工程师;
埃里克·圣马丁 (Erik St.Martin) ,世界上最知名的 Go 技术大会 GopherCon 大会的联合发起人和组织者。
《Go 语言实战》这本书并不是大部头,而是薄薄的一本(中文版才 200 多页),所以你不要期望从本书得到百科全书一样的阅读感。而且,这本书的作者们显然也没有想把它写成面面俱到的作品,而是直击要点,也就是挑出 Go 语言和其他语言相比与众不同的特点进行着重讲解。这些特点构成了这本书的结构框架:
入门:快速上手搭建、编写、运行一个 Go 程序;
语法:数组(作为一个类型而存在)、切片和 map;
Go 类型系统的与众不同:方法、接口、嵌入类型;
Go 的拿手好戏:并发及并发模式;
标准库常用包:log、marshal/unmarshal、io(Reader 和 Writer);
原生支持的测试。
读完这本书,你就掌握了 Go 语言的精髓之处,这也迎合了多数 Gopher 的内心需求。而且,这本书中文版译者李兆海也是 Go 圈子里的资深 Gopher,翻译质量上乘。
下面是我对这本书各个指数的评分:

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

如果说由Brian W. KernighanDennis M. Ritchie联合编写的《The C Programming Language》(也称 K&R C)是 C 程序员(甚至是所有程序员)心目中的“圣经”的话,那么同样由 Brian W. Kernighan(K) 参与编写的《The Go Programming Language》(也称tgpl)就是 Go 程序员心目中的“圣经”。
这本书模仿并致敬“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 的幸运。
这本书的另一名作者 Alan A. A. Donovan 也并非等闲之辈,他是 Go 核心开发团队的成员,专注于 Go 工具链方面的开发。
现在唯一遗憾的就是 Brian W. Kernighan 老爷子年事已高,不知道 Go 1.18 版本加入泛型语法后,老爷子是否还有精力再更新这本圣经。
这本书的中文版由七牛云团队翻译,总体质量也是不错的。建议 Gopher 们人手购置一本圣经“供奉”起来!
这里,我对这本书的各个指数都给了满分:

其他形式的参考资料

除了技术书籍之外,Go 语言学习资料的形式也呈现出多样化。下面是我个人经常阅读和使用的其他形式的 Go 参考资料,这里列出来供同学们参考。

Go 官方文档

如果你要问什么 Go 语言资料是最权威的,那莫过于Go 官方文档了。
Go 语言从诞生那天起,就十分重视项目文档的建设。除了可以在Go 官方网站上查看到最新稳定发布版的文档之外,我们还可以在https://tip.golang.org上查看到项目主线分支(master)上最新开发版本的文档。
同时 Go 还将整个 Go 项目文档都加入到了 Go 发行版中,这样开发人员在本地安装 Go 的同时也拥有了一份完整的 Go 项目文档。这两年 Go 核心团队还招聘专人负责 Go 官方站点的研发,就在不久前,Go 团队已经将原 Go 官方站点 golang.org 重定向到最新开发的 go.dev 网站上,新网站首页是这样的:
Go 官方文档中的Go 语言规范Go module 参考文档Go 命令参考手册Effective GoGo 标准库包参考手册以及Go 常见问答等都是每个 Gopher 必看的内容。我强烈建议你一定要抽出时间来仔细阅读这些文档。

Go 相关博客

在编程语言学习过程中,诞生于 Web 2.0 时代的博客依旧是开发人员的一个重要参考资料来源。这里我也列出了我个人关注且经常阅读的一些博客,你可以参考一下:

Go 播客

使用播客这种形式作编程语言类相关内容传播的资料并不多,能持续进行下去的就更少了。目前我唯一关注的就是 changelog 这个技术类播客平台下的Go Time 频道。这个频道有几个 Go 社区知名的 Gopher 主持,目前已经播出了 200 多期,每期的嘉宾也都是 Go 社区的重量级人物,其中也不乏像 Go 语言之父这样的大神参与。

Go 技术演讲

Go 技术演讲,也是我们学习 Go 语言以及基于 Go 语言的实践的优秀资料来源。关于 Go 技术演讲,我个人建议以各大洲举办的 GopherCon 技术大会为主,这些已经基本可以涵盖每年 Go 语言领域的最新发展。下面我也整理了一些优秀的 Go 技术演讲资源列表,你可以参考:
Go 官方的技术演讲归档,这个文档我强烈建议你按时间顺序看一下,通过这些 Go 核心团队的演讲资料,我们可以清晰地了解 Go 的演化历程;
GopherCon 技术大会,这是 Go 语言领域规模最大的技术盛会,也是 Go 官方技术大会;
GopherChina 技术大会,这是中国大陆地区规模最大的 Go 语言技术大会,由 GoCN 社区主办。

Go 日报 / 周刊邮件列表

通过邮件订阅 Go 语言类日报或周刊,我们也可以获得关于 Go 语言与 Go 社区最新鲜的信息。对于国内的 Gopher 们来说,订阅下面两个邮件列表就足够了:
Go 语言爱好者周刊,由 Go 语言中文网维护;
Gopher 日报,由我本人维护的 Gopher 日报项目,创立于 2019 年 9 月。

其他

最后,这里还有两个可能经常被大家忽视的 Go 参考资料渠道,一个是Go 语言项目的官方 issue 列表。通过这个 issue 列表,我们可以实时看到 Go 项目演进状态,及时看到 Go 社区提交的各种 bug。同时,我们通过挖掘该列表,还可以了解某个 Go 特性的来龙去脉,这对深入理解 Go 特性很有帮助。
另外一个就是Go 项目的代码 review 站点。通过阅读 Go 核心团队 review 代码的过程与评审意见,我们可以看到 Go 核心团队是如何使用 Go 进行编码的,能够学习到很多 Go 编码原则以及地道的 Go 语言惯用法,对更深入地理解 Go 语言设计哲学,形成 Go 语言编程思维有很大帮助。

写在最后

和学习任何一种知识或技能一样,编程语言学习过程中的参考资料不在于多而在于精。在这里,我已经将这些年来我积累的精华 Go 参考资料都罗列出了。如果你还有什么推荐的资料,也欢迎在留言区补充。
希望你在以专栏为主的 Go 学习过程中,能充分利用好这些参考资料,让它更好地发挥催化作用,以帮助你更快、更深入地掌握 Go 语言,形成 Go 编程思维,写出更为地道的、优秀的 Go 代码。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 42

提建议

上一篇
41 | 驯服泛型:明确使用时机
下一篇
加餐|聊聊Go 1.17版本的那些新特性
unpreview
 写留言

精选留言(19)

  • 罗杰
    2021-12-15
    要学的东西太多太多了,不论从哪里开始,从一点一滴掌握做起。有时候选择太多跟没有选择一样,先把该专栏吃透,再计划读书,一本中文,一本英文,同时也努力去阅读 Go 官方博客。

    作者回复: 👍

    14
  • aoe
    2021-12-15
    《Go 语言实战》读过一遍,已经全忘了; 《Go程序设计语言》读到第9页,出现了map,直接懵了。吸取了之前只看不练,看完就忘的教训,现在边看边练。 正在tour.go-zh.org跟着官网学习基本语法的时候,Tony 老师的专栏就开了,在这里学到了很多基础知识,节省了很大时间,尤其是学完入门篇后,再也不用为编译代码瑟瑟发抖了。 今天又看到了这么多学习资源,心情很激动! 想想在 《Go 项目的代码 review 站点》可以看到世界级大佬点评代码就更激动了!
    展开

    作者回复: 👍边看边练是最有效的方法。手不能懒:)

    6
  • 进化菌
    2021-12-16
    他山之石可以攻玉,好东西当然要多翻阅。对于当下还不熟悉go的自己,多用代码解决问题,再参考资料,应该很棒~

    作者回复: 👍

    2
  • 用0和1改变自己
    2021-12-15
    棒,方向对了,就不怕路远

    作者回复: “方向对了,就不怕路远”,说的太好了!对go来说,路也并不太遥远。

    2
  • ShiPF
    2022-06-02
    机械工业出版社的那本go程序设计语言翻译简直辣眼睛🙈,还是多学英语啃原版比较香

    作者回复: 机械工业那本中译版是七牛云团队翻译,估计是考虑上市时间,前后一致性就差一些。建议至少读一遍原版。

    1
  • ps Sensking
    2022-01-13
    请问您的两本书和这个专栏讲的一样嘛?不一样的话我希望买,如果一样的话,我希望您能出一个实战类的go 和 postgresql 结合的实战

    作者回复: 专栏偏基础。那个书是偏进阶。讲解的逻辑是不同的。

    1
  • Da Vinci
    2021-12-16
    欧神的go语言原本挺不错的,但是有点难复用,需要慢慢品

    作者回复: 那本也很不错。不过目前还有很多内容不完整。相对完整的章节值得阅读,但更多用于进阶。

    1
  • lesserror
    2021-12-15
    大白老师的这些推荐,很多都是我之前不知道的,可谓是大开眼界了。 不过,打开电商网站,搜索Go的图书,发现已经有很多国人写的著作了,其中不乏优秀之作。也有极客时间这类在线学习的网站。Go的技术布道在国内已经是遍地开花的状态了。 另外,文中说:“同时 Go 还将整个 Go 项目文档都加入到了 Go 发行版中,这样开发人员在本地安装 Go 的同时也拥有了一份完整的 Go 项目文档。” 我记得Go从某个版本开始,已经不在本地安装项目文档了吧?
    展开

    作者回复: 你知道的很多啊:) 没错,文章描述不够准确。godoc程序很早就不与go发行版一并发布了。但go文档数据是在go 1.16版本开始才移出go发行版包的。标准库包的文档由于是随源码一起的,所以一直有。

    共 2 条评论
    1
  • Rayjun
    2021-12-15
    赞,归根结底还是得自己去消化一手信息

    作者回复: 👍

    1
  • Jay
    2022-09-23 来自辽宁
    老师的书有电子版吗?想随时可以在手机上翻阅

    作者回复: 微信读书上有。

  • 微微超级丹💫
    2022-09-15 来自辽宁
    感觉学无止境啦哈哈

    作者回复: 👍

  • 菠萝吹雪—Code
    2022-09-14 来自北京
    师傅领进门,修行在个人

    作者回复: 👍

  • 怀揣梦想的学渣
    2022-08-07 来自北京
    梳理出来的资源很丰富,有了作者梳理出来的资源,我自己省事了。

    作者回复: 👍

  • Jussi Lee
    2022-07-07
    请问老师,有没有比较好go相关框架学习的资料。例如go chassis 等之类的

    作者回复: 框架太多了,我学习框架一般都是直接看框架自己的doc/guide之类的一手文档。

  • qinsi
    2021-12-19
    每看一个专栏主题就去看下Go语言规范里对应的主题

    作者回复: 👍

  • 张申傲
    2021-12-16
    感谢老师的无私分享~

    作者回复: 不客气:)

  • return
    2021-12-16
    个人觉得 能把几本书啃完, 平时看官方文档, 就已经很牛了

    作者回复: 👍

  • Bynow
    2021-12-15
    感谢老师分享。
  • 不负青春不负己🤘
    2021-12-15
    mark:)