Go 程序员硬核修炼手册
这不是一本”教你用工具”的书。这是一本教你造工具的书。
基于极客时间 229 门专栏中评定为 S 级的 25 门硬核课程重新组织,面向 5 年经验的 Go 工程师。
全书约 68 万字 / 8 章 / 36 篇文档,全部示例与动手实验以 Go 为实现语言。
体例说明
全书采用对话体:小林(5 年 Go 经验,追问不休)与老陈(二十年系统老兵,几乎从不直接给答案)。
每节的标准结构:
开场对话 → 追问链(3-5 层)→ 正解拆解 → 动手实验 → 思考题 → 参考答案
思考题分三层:理解层(能复述吗)/ 应用层(能在新场景用上吗)/ 创造层(能改进或重新设计吗)。
建议:先自己想 10 分钟再看参考答案。 老陈的答案不是标准答案,你有更好的就说明你真懂了。
八章地图
| 章节 | 覆盖课程 | 核心产出 | 字数 |
|---|---|---|---|
| 第 1 章 计算机底层 | 操作系统实战45讲、趣谈Linux、深入C语言、内存知识、编译原理之美、编译原理实战课 | OS 内核引导 + 内存分配器 + C 编译器 | 21 万 |
| 第 2 章 数据结构与算法 | 数据结构与算法之美(深度扩展) | 算法库 + B+Tree + 跳表 + LSM | 8.8 万 |
| 第 3 章 语言运行时 | JVM、V8、JS 核心原理、重学前端、浏览器原理 | GC(三色标记+混合屏障)+ 字节码 VM | 8.0 万 |
| 第 4 章 存储引擎 | MySQL实战45讲、Redis核心技术与实战 | B+Tree 引擎 + WAL + MVCC + 自己的 ES | 10.4 万 |
| 第 5 章 网络与分布式 | 网络编程实战、分布式技术原理、etcd实战课 | epoll 框架 + 完整 Raft 实现 | 5.8 万 |
| 第 6 章 系统与性能 | Linux性能优化实战、容器实战高手课 | 容器运行时 + 性能方法论 | 4.3 万 |
| 第 7 章 框架设计 | Spring核心编程思想、MiniSpring、MiniTomcat | DI 容器 + AOP + Web 容器 | 5.3 万 |
| 第 8 章 架构与多媒体 | 许式伟架构课、攻克视频技术、搞定音频技术 | 架构决策框架 + 直播系统 | 4.3 万 |
每章都远超 3 万字要求(最少的一章 4.3 万字)。
关于 Java / 前端课程的处理
25 门 S 级课里,Java 系 4 门、前端/JS 系 4 门,纯 Go 只有 2 门。我的处理是:全部保留,但落点全部转到 Go。
| 原课程 | 学的是什么 | Go 化后的产出 |
|---|---|---|
| 深入拆解 JVM | 如何设计一个语言运行时 | 用 Go 手写 GC(三色标记 + 混合写屏障) |
| MiniSpring / 小马哥Spring | 依赖管理与横切关注点 | 用 Go 手写 IoC 容器 + AOP 链 |
| MiniTomcat | 网络服务器 + 容器抽象 | 用 Go 手写 HTTP 服务器 + Radix 路由 |
| 图解 V8 | 执行引擎与动态分发 | 对照 Go 的 itab、逃逸分析、PGO |
| 浏览器原理 / 重学前端 / JS 核心原理 | 渲染流水线与并发模型 | 对照 Go 的 GMP 调度器 |
理由:JVM 讲的是 GC、内存模型、执行引擎——这些直接对标 Go runtime。Spring 讲的是 IoC/DI/AOP——Go 的 wire、dig、fx 就是同一套思想。
★ 每一章都有「00-设计推演」开篇
这是全书最重要的结构。8 章各有一篇推演篇,不讲”怎么做”,讲”为什么非得这么做”—— 从一个能工作但很差的版本出发,每遇到一个具体失败,再由失败逼出下一个设计。
| 推演篇 | 演进链 |
|---|---|
| 第 1 章 从零造一个内存分配器 | mmap → 批发bump → 空闲链表 → size class → 三层缓存 → tiny/large |
| 第 2 章 数据结构怎么选 | 数组 → 有序数组 → 链表 → BST → 红黑树 → 哈希 → 跳表 → B+Tree → LSM |
| 第 3 章 从零造一个 GC | 引用计数 → 标记清除 → 标记整理 → 复制式 → 分代 → 并发三色 → 写屏障 → 混合屏障 |
| 第 4 章 从零造一个存储引擎 | 内存map → 全量落盘 → 追加日志 → 分段合并 → SSTable → LSM → B+Tree → +WAL |
| 第 5 章 从零造一个共识算法 | 写三遍 → 多数派 → leader+日志 → term → 投票限制 → 一致性检查 → 提交条件 |
| 第 6 章 从零造一个容器 | 裸进程七宗罪 → chroot → namespace → cgroup v1 → v2 → capabilities/seccomp → OverlayFS |
| 第 7 章 从零造一个 Web 框架 | 每连接一线程 → 轮询 → select → epoll → goroutine;if-else → map → 正则 → radix tree;重复 → 函数 → 洋葱模型 → 扁平化 |
| 第 8 章 从零造一个直播系统 | 直连 → 中央转发 → 集群 → CDN → 分析延迟 → 三条降延迟路线 |
为什么这样安排?
实现会过时——Go 的 GC 会改、Linux 的调度器会变、新的编码标准会出现。 但”从失败里推出设计”的能力不会过时。
每篇推演结束都提炼了可迁移的思维模式(先做最差版本 / 失败要精确归因 / 注意”免费的”好处 / 优化不动时转移成本 / 约束逼出唯一解……),并留了一个你自己的练习——通常是这条推导链的下一环。
推荐读法:每章先读
00-设计推演建立设计感,再读后面的实现篇。 读实现篇时对照着找——“推演里的第 N 次失败,对应代码里的哪几行?“
贯穿全书的七条法则
这七条在第一、二、三……八章反复出现,是全书真正的骨架:
| # | 法则 | 在不同层次的表现 |
|---|---|---|
| 1 | 让相关的东西物理上靠近 | 缓存行 → 内存页 → NUMA 节点 → B+Tree 节点大小 → 数据分片 |
| 2 | 层次化缓存 | CPU L1/L2/L3 → TLB → Go mcache/mcentral/mheap → Buffer Pool → CDN |
| 3 | 用约束换性能 | Arena 分配 → 栈分配(逃逸分析)→ 不分代 GC → 一致性级别选择 |
| 4 | 把信息提前到编译期 | 静态类型 → 静态链接 → wire(编译期 DI)→ PGO |
| 5 | 操作贵不贵看它破坏了什么 | 上下文切换(TLB 失效)→ GC STW(缓存变冷)→ 页分裂 |
| 6 | 先减少工作量,再优化效率 | Top-K 堆代替全排序 → 布隆过滤器避免磁盘 IO → 索引 → 剪枝 |
| 7 | 把复杂挪到不常发生的时刻 | 编译期 → 配置期 → 离线重建索引 → 增量索引 |
建议阅读路径
严格按 1→8 顺序
第 1 章最难也最重要。啃下来后面会越来越快。不要跳章——第 4、5 章大量依赖第 1、3 章的知识。
自测标准:第 1 章末尾有 30 道题。答对 20 题以上再往下走;如果”内存”那一组答对少于 5 题,一定重读第 3 节。
时间预算
按每周一章,约两个月。每天 1.5~2 小时,其中 阅读 40% / 写代码 40% / 做思考题 20%。
如果只读不写,这份教程的价值会掉到 20%。 所有的 “aha moment” 都在代码里,不在文字里。
环境要求
go version # 1.21+
gcc / clang # 第 1 章需要 C 编译器
Linux 或 WSL2 # 第 1、5、6 章的部分实验需要 Linux
sudo 权限 # 第 6 章容器实验、perf/eBPF 需要建议的代码仓库
~/gohard/
├── ch01-kernel/ 内核引导、内存分配器、C 编译器
├── ch02-algo/ 算法库、B+Tree、跳表、LSM
├── ch03-runtime/ GC、字节码虚拟机、逃逸分析器
├── ch04-storage/ ★ B+Tree 引擎、WAL、MVCC、LSM、搜索引擎
├── ch05-distributed/ ★ epoll 框架、Raft
├── ch06-perf/ 容器运行时、观测脚本
├── ch07-framework/ DI 容器、HTTP 服务器、Radix 路由
└── ch08-media/ 音视频管线
带 ★ 的两章最能”变现”——学完你手上就有了自己的分布式存储和共识库。
学完之后
你应该能回答这七个问题(第 0 章提出,全书回应):
- 程序是怎么跑起来的? —— 第 1、2、5、6 章
- 内存是怎么被管理的? —— 第 1、3、4、6 章
- 为什么会有”并发”这个难题? —— 第 3、5、7 章
- 数据存到哪里去了? —— 第 4 章
- 快,是怎么做到的? —— 第 2、6 章
- 复杂度是怎么被控制的? —— 第 7、8 章
- 什么情况下,我应该自己造? —— 第 8 章
以及最终的目标:
当行业里没有现成方案时,你能自己设计一个。
—— 没有 ES?自己写一个。没有合适的存储引擎?自己造一个。没有满足场景的框架?自己搭一个。
目录结构
Go程序员硬核修炼手册/
├── 00-总纲/
│ └── README-如何使用这份教程.md
├── 第1章-计算机底层-从晶体管到进程/ (11 篇,含 00-设计推演)
├── 第2章-数据结构与算法设计范式/ (5 篇,含 00-设计推演)
├── 第3章-语言运行时与执行引擎/ (5 篇,含 00-设计推演)
├── 第4章-存储引擎与数据系统/ (5 篇,含 00-设计推演)
├── 第5章-网络与分布式系统/ (4 篇,含 00-设计推演)
├── 第6章-系统与性能工程/ (4 篇,含 00-设计推演)
├── 第7章-框架设计思想与造轮子/ (4 篇,含 00-设计推演)
├── 第8章-架构心法与多媒体系统/ (4 篇,含 00-设计推演)
└── README.md ← 你在这里
每章都有 README.md 作为导读,说明本章覆盖的课程、结构、学完能做什么,并标注了 00-设计推演 为必读开篇。
最后
这份教程里有很多”老陈的反问”。有些你可能要憋很久才答得上来,有些看到答案还觉得不服气。
都正常。
真正的系统能力,不是知道很多答案,而是在没人给答案的时候,知道该往哪个方向挖。
现在,去找一个真实的问题,用你学到的东西解决它。只有用过,这些才是你的。
生成于 2026-08-29 · 数据源:\\192.168.3.216\精选\简知-课程\A09_极客时间\专栏(229 门课程目录扫描)