目录

Golang 学习书籍与资源推荐

从入门到进阶的 Go 书单与免费在线资料

Go(Golang)自 2009 年由 Google 开源以来,凭借简洁的语法、原生的并发支持(goroutine/channel)和出色的工程化体验,逐渐成为云原生、后端服务和命令行工具领域的主力语言之一。学习一门语言,官方文档和一本好书的组合往往比零散的博客更系统。本文整理一份 Go 学习书单,既包含国际公认的经典,也保留了几份对中文开发者友好的免费资料,并按阶段给出选书建议。

  • 作者:Alan A. A. Donovan、Brian W. Kernighan
  • 出版社:Addison-Wesley,2015 年 10 月
  • ISBN:978-0134190440,380 页

这本书常被称作 “Go 圣经”。Donovan 是 Google 基础设施团队的工程师,自 2012 年起参与 Go 团队,负责静态分析相关库与工具;Kernighan 则是《The C Programming Language》的合著者、Unix 与 C 语言时代的传奇人物。两位作者的背景决定了这本书在语言设计与编程风格阐述上的深度。

全书从一份引导教程(tutorial)开始,依次讲解程序结构、基础与复合数据类型、函数、方法、接口、goroutine 与 channel、基于共享变量的并发、包与 Go 工具、测试、反射(reflection)与底层编程。示例精炼、风格地道,适合有一定编程基础、希望系统理解 Go 的读者。

需要留意的是,该书出版于 2015 年,未覆盖 Go 1.18 引入的泛型(generics)、Go modules 等较新特性,阅读时建议配合官方 Release Notes 补充。

  • 作者:William Kennedy、Brian Ketelsen、Erik St. Martin
  • 出版社:Manning Publications,2015 年 11 月
  • ISBN:9781617291784,约 240 页

一本偏实战、篇幅紧凑的入门书。三位作者都是 Go 社区的活跃人物,其中 Kennedy 是 Ardan Studio 合伙人、知名博客 “Going Go Programming” 的作者;Ketelsen 与 St. Martin 是首届 GopherCon 的联合发起人。

该书并不手把手教语法,而是围绕 Go 的类型系统(struct/interface/嵌入)、并发模型、包与工具链、测试和标准库展开,适合熟悉其他语言、想快速抓住 Go 惯用法的开发者。

  • 作者:Katherine Cox-Buday
  • 出版社:O’Reilly Media,2017 年 8 月
  • ISBN:978-1491941195,238 页

Go 的并发是它最有特色也最容易踩坑的部分。这本书系统讲解 Go 的并发原语与模式,涵盖 goroutine、channel、selectsync 包、context、并发爬虫/管道等典型场景,并讨论了数据竞争(data race)、goroutine 泄漏、负载均衡与 work-stealing 调度等内容。适合已经写过 Go、希望深入理解并发的中高级读者。

  • 作者:Teiva Harsanyi(Google 软件工程师)
  • 出版社:Manning Publications,2022 年 10 月
  • ISBN:9781617299599,384 页

这本书把 100 个常见的 Go 错误归类讲解,涵盖代码组织、数据类型、控制结构、字符串、函数与方法、错误管理、并发基础与实践、标准库、测试与优化十个章节。例如切片容量误用、nil map 写入、range 循环变量捕获、time.After 内存泄漏、表驱动测试(table-driven tests)与模糊测试(fuzzing)等。配套站点 100go.co 提供了书中的错误摘要,可作为速查表。

这本书适合在写过一段时间 Go 之后回头精读,许多 “坑” 会让人会心一笑。

  • Learning Go: An Idiomatic Approach to Real-World Go Programming(Jon Bodner,O’Reilly,2021):内容较新,覆盖现代 Go 的惯用法。
  • Distributed Services with Go(Travis Jeffery,Pragmatic Bookshelf,2021):用 Go 从零构建一个基于 Raft 的分布式服务,涵盖 Protocol Buffers、gRPC 与一致性算法,适合想入门分布式系统的读者。
  • Efficient Go(Bartłomiej Płotka、Frederic Branczyk,O’Reilly,2022):关注性能与可观测性,适合做 SRE/性能优化的工程师。

纸质书之外,Go 生态有几份质量很高的免费资料,往往比某些付费书更值得反复读。

  • 作者:Chris James(GitHub: quii)
  • 许可:MIT,在线免费(也提供 EPUB/PDF)

整本书以测试驱动开发(Test-Driven Development, TDD)为主线,通过 “写测试 → 失败 → 实现 → 通过” 的小循环来推进。第一部分 “Go Fundamentals” 用 21 章逐步介绍变量、struct、map、并发、mock、generics 等;第二部分 “Build an Application” 用迭代式项目串起 HTTP、JSON、WebSocket、命令行工具等主题。已被社区翻译为包括中文在内的多种语言。

  • 作者:Mark McGranaghan、Eli Bendersky
  • 地址:gobyexample.com

以 “带注释的可运行示例” 介绍 Go,从 Hello World、变量、控制流,到 slice、map、struct、interface、generics,再到 goroutine、channel、select、worker pool、mutex,以及 JSON、HTTP、文件 I/O、testing 等标准库用法。每个示例都简短完整,适合当字典查。

  • 作者:Tapir Liu(老貘)
  • 地址:go101.org

一份细节详尽的免费电子书,对 Go 的类型系统、值/指针、接口、内存模型等做了非常细致的剖析。同作者另有《Go Generics 101》《Go Optimizations 101》《Go Details & Tips 101》等,适合想深挖语言细节的读者。

  • A Tour of Go(go.dev/tour):官方交互式教程,适合在浏览器里跑代码快速入门。
  • Effective Go(go.dev/doc/effective_go):Go 团队早期撰写的惯用法指南,讲解命名、格式化、控制结构、new/make、接口、嵌入、并发与错误处理等。注意它写于 2009 年,官方明确说明不再维护,未覆盖泛型、modules、errors.Is/Ascontextslog 等新特性,核心思想仍值得读,但需要与现代实践结合。
  • Go Wiki - Books(go.dev/wiki/Books):官方维护的 Go 书单,收录上百本中英文书籍与免费资料,选书时可在此交叉核对版本与新近程度。

原文本篇笔记最初收录的两个链接,至今仍是中文 Go 社区最重要的免费资料。

  • build-web-application-with-golang(github.com/astaxie/build-web-application-with-golang):astaxie(谢孟军,Beego 框架作者)编写的开源电子书,系统讲解如何用 Go 构建 Web 应用,GitHub 上约 4 万余 star,采用 CC BY-SA 3.0 协议。内容也对应其纸质书《Go Web 编程》。多语言翻译版本齐全,是中文入门 Web 开发的经典。
  • 煎鱼的迷之博客(github.com/eddycjy/blog):博主 eddycjy(煎鱼)的 Hugo 博客源码,站点地址 eddycjy.com。内容以 Go 为主,覆盖语言特性、源码分析、工程实践与面试题等,更新频率高,是中文 Go 社区有代表性的原创博客之一。

此外,中文图书中较有代表性的还有:

  • 《Go 语言编程》(许式伟,人民邮电出版社,2012):国内较早的 Go 入门书。
  • 《Go 并发编程实战》(郝林,人民邮电出版社,2015):系统讲解 Go 并发。
  • 《Go 语言高级编程》(柴树杉,人民邮电出版社,2019):涉及 CGO、汇编、RPC 与编译器等高级主题。

按学习阶段简单梳理:

  1. 零基础入门:先过一遍 A Tour of Go,然后挑 Go by Example(查用例)或 Learn Go with Tests(动手练)做主线。
  2. 系统打基础:读《The Go Programming Language》(Donovan & Kernighan),辅以《Go in Action》理解工程化思维。
  3. 深入并发:读《Concurrency in Go》,并对照 Effective Go 中的并发章节。
  4. 工程进阶:写一段时间代码后回头读《100 Go Mistakes and How to Avoid Them》,能补上大量实战细节。
  5. 专项方向:云原生方向可读 Cloud Native Go、Distributed Services with Go;性能方向可读 Efficient Go;中文实战可跟随 astaxie 的电子书与煎鱼的博客。

Go 的语言本身不大,真正难的是把它的并发模型、接口设计与工程化习惯用 “地道” 的方式落地。书单只是入口,多写、多读标准库源码(net/httpdatabase/sqlcontext 等)往往是提升最快的方式。

相关内容