跳到正文

Go 学习路线 ​

本目录是 Go 语言卷,00 只做导航。先讲语法、类型、错误和并发原语,再讲 GPM、逃逸和 GC,最后看 Go 在 AI 基础设施里的位置;顺序不是按题目排,而是按「写得出 → 用得住 → 知道为什么」排。

适用基线:Go 1.22+。选 1.22 是因为 for 循环变量改为每次迭代一份,闭包和 goroutine 的行为与更早版本不同;泛型从 1.18 开始,篇内会单独标注。版本相关的默认值和行为以官方文档和 Release Notes 为准。


一、章节与定位 ​

篇一句话定位前置
01 语法基础与类型系统声明、常量、零值、类型转换、string/byte/rune、控制流无
02 复合类型数组是值、切片三要素与别名、map 引用语义、struct 嵌入01
03 函数、方法与接口多返回值、闭包、defer、方法集、接口值 = 类型 + 数据01、02
04 错误处理、defer 与 panicerror 是接口、%w 包装、errors.Is/As、panic 边界03
05 泛型与类型参数约束、comparable、~、类型推断、何时不该用02、03
06 并发原语goroutine、channel/select、Mutex/WaitGroup、context 取消03、04
07 Goroutine 与 GPM 调度G/P/M、异步抢占、sysmon、channel 运行时结构、泄漏排查06
08 内存逃逸逃逸判定、-gcflags="-m"、基准与分配 profile01、02、07
09 垃圾回收三色标记、混合写屏障、GOGC/GOMEMLIMIT、gctrace07、08
10 模块、测试与工具链go mod、包与 internal、表驱动测试、-race、交叉编译01–04
11 常见陷阱与工程惯例11 个高频坑的「现象 → 原因 → 正确写法」01–06
12 Go 与 AILLM 网关、MCP、Agent 控制面、推理路由;Go 适合与不适合的位置06、10

每篇都有可运行的「最小上手」。先跑通,再读「核心机制」,最后用自己的话复述「讲清楚」。


二、四条阅读路径 ​

路径 A:语法速通 ​

按 01 → 02 → 03 → 04 → 05 读。

目标是一周内能独立写出带错误处理、接口和泛型的小程序,看到切片、map、闭包、defer 能说出行为。05 可以只读前两节,等真正要写通用容器时再回来。

验收:能解释 append 后两个切片为什么有时互相影响、nil 接口和 nil 指针为什么不同、%w 和 %v 的区别。

路径 B:工程上手 ​

按 01 → 02 → 03 → 04 → 06 → 10 → 11 读,05 按需穿插。

目标是把代码放进一个可测试、可构建、能查并发问题的工程里。06 只讲原语和纪律,GPM 细节留到 07;10 的命令直接对着 examples/10_tooling 跑;11 当评审清单用。

验收:能建 module、写表驱动测试、用 -race 抓竞争、用 context 传播取消、给交叉编译产物。要做 AI 网关或工具服务时接 12。

路径 C:运行时深入 ​

按 01 → 02 → 03 → 06 → 07 → 08 → 09 → 10 读。

目标是从「会用」走到「知道代价」:goroutine 为什么便宜、变量为什么上堆、GC 为什么有 STW 和写屏障。07–09 依赖 06 的 channel/context 语义,08 依赖 01/02 的值与指针,09 又依赖 07/08 的栈和堆概念。

验收:能画 G/P/M 关系,能用 -gcflags="-m" 解释一次逃逸,能读 gctrace 的一行输出并判断 GC 为什么变密。

路径 D:AI 基础设施 ​

按 04 → 06 → 10 → 12 读,11 当并发和资源释放的检查表。

目标是能写一个 LLM 网关或 MCP 工具服务:会做 SSE 透传、客户端断开后取消上游、有界队列和优雅停机。12 不要求先读完 07–09;但要知道 goroutine 和 context 的成本,遇到连接数或内存问题再回 06–09。

验收:能解释「客户端断开 → 代理取消 → 上游停止生成」的链路,能指出网关里哪些超时不能照搬普通 HTTP 接口。


三、示例位置 ​

所有示例在 examples/,每个目录一个可独立运行的程序:

示例对应篇运行
examples/01_syntax01go run examples/01_syntax/main.go
examples/02_composite02go run examples/02_composite/main.go
examples/03_functions_interfaces03go run examples/03_functions_interfaces/main.go
examples/04_errors04go run examples/04_errors/main.go
examples/05_generics05go run examples/05_generics/main.go
examples/06_concurrency06go run examples/06_concurrency/main.go
examples/10_tooling10cd examples/10_tooling && go test ./...
examples/11_pitfalls11go run examples/11_pitfalls/main.go
examples/12_ai_sse12go run examples/12_ai_sse/main.go

07–09 的最小上手依赖 net/http/pprof、长时间运行和 profile 工具,代码在正文里,按篇内命令单独起进程。examples/10_tooling 是唯一带 go.mod 的子目录,用来演示包、测试和构建命令;12 的 SSE 示例只用标准库,直接 go run 即可。


四、环境 ​

bash
go version                 # 1.22+;本目录示例在 Go 1.27.1 上验证
go env GOMODCACHE GOPROXY  # 依赖缓存与代理
gofmt -w .                 # 提交前格式化

读法建议:每篇先跑示例,再对照「核心机制」解释输出;遇到与版本相关的行为,先看篇内标注,再查官方文档,不要用旧博客的结论替代当前版本的验证。

适用 Go 1.22+ | 初稿 2026-10

把一门技术讲透到既懂也会用