《Go 语言编程入门》目录
这一页是全书的总入口。它不只列出章节标题,还给出三条可以照着走的阅读路径,以及每一节的定位说明。如果你不确定从哪开始,先读下面的「读者画像与前置知识」,再对照「学习路径」选一条;如果你已经有明确目标,可以直接跳到「分部分章节」按编号定位。
全书结构是:前置 3 篇 + 正文 18 章 54 节 + 附录 4 篇,共 61 篇。正文按学习曲线分为六个部分,每一部分解决一类问题,并围绕一个贯穿全卷的项目 TaskAPI 逐步长大。
如何使用本目录
这一页有三种用法,取决于你此刻的状态:
如果你刚拿到这本书,按顺序读「本书定位」「读者画像与前置知识」「学习路径」三节,用五分钟决定自己的入口章节。不要跳过这一步,选错入口比读得慢更浪费时间。
如果你已经读到一半,想查某一节在哪,直接看「分部分章节」里对应部分的表格。每一行都有一句话说明,可以帮你确认是不是你要找的那一节,避免点进去再退出来的反复。
如果你把这本书当手册用,主要会用到「前置与附录」和每一节末尾的小结。附录 A 到 D 分别覆盖语法、标准库、工具链与常见错误,是查阅频率最高的四篇。
本书定位
这是一本面向零基础读者的 Go 系统教材。它的目标不是让你「听说过 goroutine」,而是让你能够独立地用它写出结构清晰、可测试、能交付的服务。
它有三个刻意的取舍。第一,重原理而非重清单:讲清楚一个特性为什么存在、什么时候该用,比罗列它能写什么更重要。第二,示例可运行:书中代码都在 Go 1.27 上实跑过,输出是真实结果,而不是伪代码。第三,用项目串知识点:全书围绕 TaskAPI 一个项目推进,语法点服务于「把它写对、写稳、写上线」这件事,而不是孤立地演示语言特性。
如果你需要的是一份「30 分钟速成 Go 语法」的清单,这本书可能过于啰嗦;如果你希望一次把基础打牢、之后不必反复回炉,那它的节奏是合适的。
读者画像与前置知识
不同类型的读者,起点和建议路径差别很大。可以先在下面找到最接近自己的那一类。
完全新手(几乎没写过代码):建议按顺序从第 1 章读到第 18 章,不要跳章。语言的知识是层层叠加的——不理解切片与 map 就读不懂结构体上的方法集,不理解接口就读不懂错误处理与依赖注入。唯一的前置是能用命令行、知道文件与目录是什么。请把每一节的示例亲手敲一遍,「跑通」比「读懂」重要得多。
有其他语言基础(Java/C#/Python/JavaScript 等):可以快速扫过第 2、3 章,把主要精力放在第 4 章之后——结构体、接口、错误处理、并发与工程化。请特别留意三处与主流语言差异最大的地方:Go 用组合与接口而非继承(4.3、5.3),错误是返回值而非异常(第 6 章),并发用 channel 通信而非共享内存(第 10 章)。第 11、12 章的并发安全对你来说信息密度最高。
会写 Go 但没系统学过:你可能凭经验知道「用 := 声明变量」「error 要判空」,但不知道接口是隐式实现的、append 的扩容策略会改变别名行为。最值得读的是第二部分(第 4–6 章)与第三部分(第 7–9 章),它们解释的正是你写复杂代码时卡壳的那些地方。第 8 章的测试与第 12 章的 context,是把脚本思维升级成工程思维的关键。
学习路径
下表给出三条典型路径。三条路径不互斥,可以先速成再补齐。
| 路径 | 适合谁 | 读哪些 | 预计用时 |
|---|---|---|---|
| 完整通读 | 零基础 / 想重建知识结构 | 第 1 章至第 18 章顺序读,每节动手写代码 | 8–9 周(每天 1 小时) |
| 快速上手 | 有其他语言基础、急于能干活 | 1.1、1.3、2.3、4.1、5.1、6.2、10.2、13.1 共 8 节 | 3 周 |
| 参考手册 | 已会用、需要随时查 | 按目录定位章节,优先用每节「本节目标」与「小结」 | 按需 |
两条补充建议:无论选哪条路径,都请完整跑通第 1 章的示例,把工具链与模块配好;如果时间允许,第 6 章关于错误包装、第 11 章关于竞态检测的部分值得反复读,它们决定了你的代码在生产环境里是否可靠。
一份可执行的八周计划
上面三条路径偏原则。如果你希望有一份可以直接照着打勾的安排,下面这份八周计划可以作为起点(按每天投入一小时估算),它对应的是「完整通读」路径。
| 周次 | 主要任务 | 完成标志 |
|---|---|---|
| 第 1 周 | 第 1–2 章:工具链、第一个程序与语言基础 | 能建好模块并写出结构清晰的小程序 |
| 第 2 周 | 第 3–4 章:复合类型与结构体方法 | 能用切片、map、结构体给任务建模 |
| 第 3 周 | 第 5–6 章:接口与错误处理 | 能抽象出接口并写出分层的错误处理 |
| 第 4 周 | 第 7–8 章:包与模块、测试 | 能把项目拆包并写出表驱动测试 |
| 第 5 周 | 第 9–10 章:泛型与 goroutine、channel | 能用泛型容器与并发队列处理任务 |
| 第 6 周 | 第 11–12 章:同步与 context | 能写出并发安全、可取消的服务 |
| 第 7 周 | 第 13–15 章:Web 服务、数据、分层 | 能用 net/http 暴露 REST 并接入数据库 |
| 第 8 周 | 第 16–18 章:可观测性、构建、综合项目 | 能打包部署一个完整的服务 |
这份计划的关键不在于准时,而在于每周都有产出。语言知识如果不落到代码上,遗忘速度会非常快。如果某一周的任务没有完成,宁可延长这一周,也不要为了赶进度跳过动手环节。
每周结束时,可以用三个问题自查:这一周学到的写法,我在自己的代码里用过吗?遇到报错时,我是自己读懂的还是靠搜索绕过去的?如果现在合上书,我能向别人讲清楚这一周最核心的那个概念吗?三个问题里只要有一个答不上来,就值得回头补一补再往下走。
如果你的时间只有一半,可以把第 7 周与第 8 周压缩,先跳过部署与可观测性的细节——它们更接近「按需查阅」的内容,等到项目里真的用上再回来补即可。
三条路径之外的三条提醒
无论选哪条路径,有三条提醒能显著影响你的阅读体验:
不要只读不写。 这本书的示例都很短,正是为了让你能随手敲一遍。只读不写,你收获的会是「我好像懂了」的错觉;敲过一遍、报过错、改对过,才是真的懂了。
不要跳过第 1 章的工具链配置。 后面每一节的示例都依赖它,地基不稳,后面每一步都会变得别扭。
不要用搜索绕开报错。 初学阶段最容易养成、也最难戒掉的习惯,是一遇到报错就复制去搜。先自己读一遍报错信息,实在想不通再查——读懂报错是一项能陪你很久的能力。
六个部分之间的依赖关系
六个部分不是平行关系,而是层层依赖的。下面这张表说明每一部分依赖什么、又被谁依赖,方便你判断能否跳过某一部分:
| 部分 | 依赖 | 被依赖 | 能否跳过 |
|---|---|---|---|
| 第一部分 起步 | 无 | 全部后续部分 | 有其他语言基础者可速读 |
| 第二部分 建模 | 第一部分 | 第三至六部分 | 不建议跳过 |
| 第三部分 工程化 | 第一、二部分 | 第四至六部分 | 不建议跳过 |
| 第四部分 并发 | 第一至三部分 | 第五、六部分 | 可先跳过,Web 部分会回补 |
| 第五部分 Web | 第一至四部分 | 第六部分 | 有后端经验者可挑读 |
| 第六部分 交付 | 第一至五部分 | 无 | 有项目经验者可挑读 |
一个实用的判断原则是:第二部分(建模)与第三部分(工程化)是绕不过去的地基,其余部分都可以根据你的实际工作来取舍。如果你的方向是 Web 后端,第五部分的 Web 服务(第 13–15 章)与第四部分的并发(第 10–12 章)优先级最高;如果你主要做基础设施与工具,第 16、17 章更急,Web 部分可以往后放。
与既有 Go 专题的分工
本站的 Go 专题已经积累了 300 多篇文章,覆盖了 Go 的各个单点主题:内存模型、GMP 调度、sync 原语的取舍、性能剖析、常用库选型等等。它们质量不低,但有一个共同的特点:每一篇都假设你已经会 Go,然后带你在某个单点上钻深。
这本书与它们的分工,靠的是项目语境。卷一的每一节都以 TaskAPI 的推进为主线,语法点服务于项目:你不会看到「Go 有哪几种类型」这种脱离上下文的罗列,而会看到「任务列表该用什么数据结构来存、为什么」。也就是说,本书负责按顺序打地基,专题负责就一个问题钻到底,两者是互补关系。
需要特别说明的是并发深度:卷一的第 10–12 章只写到「会用 + 能用 -race 验证」为止。errgroup、semaphore、goleak、结构化并发、GMP 调度原理这些内容一律不写,留给高级卷。如果你现在就想深挖这些,可以直接读本站的 Go 专题。
版本与示例约定
为了让全书保持一致的预期,这里先交代版本与示例的约定,后面每一节都默认你已经知道这些口径:
- 本书主线是 Go 1.27,对照线是 Go 1.26。书中代码在本机
go1.27.0工具链上实测,官方同期最新稳定版是go1.27.2;同一条版本线内的补丁差异不影响本书结论。 - 多版本共存用
GOTOOLCHAIN。本机默认工具链较旧,但可以通过GOTOOLCHAIN=go1.27.0 go version切换到指定工具链,这一点在 1.1 安装与工具链 里会详细展开。 - 卷一原则上只用标准库。
net/http、database/sql、log/slog、testing、slices、maps等足以支撑全部示例,不需要引入第三方依赖。 GOEXPERIMENT在 1.27 默认为空。凡涉及实验性开关的地方,正文都会明确标注「1.27 是否默认开启」并给出开启命令。- 代码块都标语言:
go表示 Go 代码,bash表示命令行,text表示真实输出或报错原文,yaml/json/dockerfile/sql分别对应配置与脚本。 - 输出与代码分离:Go 代码块之后,紧跟着的
text代码块是这段代码在本机跑出的真实输出,不是示意。
分部分章节
下面按六个部分列出全部 18 章 54 节,每一行给出编号、标题与一句话说明。
表格里的编号规则是「章.节」,例如 13.2 表示第 13 章第 2 节。点击标题即可进入该节正文。每个部分开头都有一段导读,说明这一部分在整个学习曲线中的位置;如果你只想知道某节讲什么,直接看表格第三列的说明即可。
需要提醒的是,正文的每一节都遵循「本节目标 → 正文小节 → 小结 → 衔接下一节 → 阅读导航」的五段式结构,所以即使你从中间某节切入,也能通过开头的目标说明快速建立上下文,不必担心前情缺失。
第一部分:起步(第 1–3 章)
这一部分解决「是什么、怎么装、怎么写」三个前置问题,读完能独立建好模块、运行第一个程序,并用 Go 的基础类型给任务建模。
节奏上,这一部分刻意放慢了。第 1 章讲工具链与模块,看起来与写业务代码无关,但它决定了你后面怎么组织项目、怎么管理依赖。第 2 章是语法密度最高的一章,可以边读边查,不必强求记住所有细节。第 3 章开始接触 Go 最具特色也最容易踩坑的复合类型——切片与 map。
| 编号 | 章节 | 说明 |
|---|---|---|
| 1.1 | 安装与工具链 | 装好 Go、理解 GOTOOLCHAIN 多版本共存,配好编辑器 |
| 1.2 | 第一个程序与 go run/build | 写出第一个 main 包,看懂 go run 与 go build 的区别 |
| 1.3 | Go Modules 与项目骨架 | 用 go mod init 建起 TaskAPI 骨架,理解模块与包的关系 |
| 2.1 | 变量、常量与基本类型 | 掌握 var/:=、零值与基本类型,为 Task 建模打底 |
| 2.2 | 控制流与循环 | 用 if/for/switch 把 add、list、toggle 逻辑写清楚 |
| 2.3 | 函数、多返回值与 defer | 用多返回值与 defer 组织命令式函数 |
| 3.1 | 数组、切片与扩容 | 用切片存任务,理解 len/cap 与 append 的扩容行为 |
| 3.2 | map 与集合惯用法 | 用 map 建索引,掌握 comma-ok 惯用法与删除 |
| 3.3 | 字符串、rune 与字节 | 正确处理中文标题,分清 byte、rune 与 UTF-8 编码 |
第二部分:建模(第 4–6 章)
这一部分是全书的核心。它解释 Go 如何用「结构体 + 接口 + 错误值」这三样东西表达现实世界:数据怎么组织、行为怎么附加、多态怎么实现、错误怎么传递。是从「会写语法」迈向「会设计代码」的分水岭。
| 编号 | 章节 | 说明 |
|---|---|---|
| 4.1 | 结构体定义与初始化 | 定义 Task 结构体,掌握字面量、字段标签与零值可用 |
| 4.2 | 方法与值/指针接收者 | 给 Task 加 Complete/Rename,选对接收者类型 |
| 4.3 | 组合与嵌入 | 用嵌入表达子任务,理解为什么组合优于继承 |
| 5.1 | 接口定义与隐式实现 | 抽象出 TaskStore 接口,用内存实现 MemStore |
| 5.2 | 类型断言与 type switch | 安全地还原具体类型,用 type switch 处理多态分支 |
| 5.3 | 接口设计惯用法 | 小接口、接受接口返回结构体等惯用法与取舍 |
| 6.1 | error 接口与哨兵错误 | 定义 ErrNotFound 与 ErrInvalidTitle,理解 error 是接口 |
| 6.2 | fmt.Errorf 与 %w 包装 | 用 %w 包装错误,在每一层保留上下文 |
| 6.3 | errors.Is/As 与自定义错误 | 用 Is/As 判定错误类别,设计自定义错误类型 |
第三部分:工程化(第 7–9 章)
这一部分把「能跑的代码」升级为「能维护的工程」:怎么拆包、怎么管依赖、怎么测试、怎么用泛型消除重复。它回答的是「代码写出来之后,怎么保证它长期可维护、可验证」。
| 编号 | 章节 | 说明 |
|---|---|---|
| 7.1 | 包的声明、导入与可见性 | 拆包为 internal/task、internal/store、cmd/taskapi |
| 7.2 | go.mod/go.sum 与最小版本选择 | 理解最小版本选择(MVS)与 go.sum 的校验作用 |
| 7.3 | go get/tidy/vendor 与依赖治理 | 治理依赖:掌握 tidy、vendor 与版本约束 |
| 8.1 | 表驱动单元测试 | 为 store 与校验写表驱动测试 |
| 8.2 | 基准测试与覆盖率 | 用 benchmark 与 -cover 量化性能与覆盖 |
| 8.3 | 测试替身与接口 mock | 用 fake store 替换真实依赖,隔离被测逻辑 |
| 9.1 | 类型参数与约束 | 定义泛型 Page[T] 分页结果,理解类型参数与约束 |
| 9.2 | slices/maps/cmp 标准库 | 用标准库泛型容器重写查询与聚合 |
| 9.3 | 泛型的取舍 | 判断何时该用泛型、何时该用接口 |
第四部分:并发(第 10–12 章)
这一部分进入 Go 最标志性的能力:并发。它讲清 goroutine、channel、同步原语与 context 四件事,目标不是让你成为调度专家,而是让你能写出并发安全、可取消、可退出的服务代码。深度到此为止,更底层的内容留给高级卷。
| 编号 | 章节 | 说明 |
|---|---|---|
| 10.1 | goroutine 与调度直觉 | 起一个后台 worker,理解 goroutine 的轻量与调度直觉 |
| 10.2 | channel 与 select | 用 channel 做任务队列,用 select 做多路等待 |
| 10.3 | worker pool 与 pipeline | 组装 worker pool 与 pipeline 批量处理到期任务 |
| 11.1 | Mutex/RWMutex 与 atomic | 用 RWMutex 保护 store,用 atomic 做无锁计数 |
| 11.2 | WaitGroup/Once/sync.Map | 用 WaitGroup、Once 与 sync.Map 协调并发 |
| 11.3 | 用 -race 发现竞态 | 用竞态检测器验证并发安全,读懂它的报告 |
| 12.1 | context 的取消与传播 | 让请求级 context 贯穿调用链,逐层响应取消 |
| 12.2 | 超时、截止时间与 WithValue | 用 WithTimeout/WithDeadline 控制生命周期,慎用 WithValue |
| 12.3 | 优雅退出与信号处理 | 用 Ctrl-C 信号触发优雅排空,不丢在途请求 |
第五部分:Web(第 13–15 章)
这一部分把前面所有能力组装成一个真正的 Web 服务:用 net/http 暴露 REST 接口,用 database/sql 接数据库,用分层与配置把代码组织清楚。它回答的是「一个能被别人调用的服务,长什么样」。
| 编号 | 章节 | 说明 |
|---|---|---|
| 13.1 | Handler、ServeMux 与路由 | 用 net/http 暴露 /tasks 的 CRUD 接口 |
| 13.2 | 请求解析、JSON 与响应 | 解析请求体、编码 JSON 响应与设置状态码 |
| 13.3 | 中间件与访问日志 | 用中间件链组织横切逻辑与访问日志 |
| 14.1 | database/sql 与驱动 | 接入数据库,理解连接池、预处理与驱动注册 |
| 14.2 | SQL 增删改查与事务 | 写出增删改查与事务,正确处理行与错误 |
| 14.3 | schema 迁移与 sqlc | 用迁移管理 schema,用 sqlc 生成类型安全查询 |
| 15.1 | 配置加载(flag/env/文件) | 用 flag、环境变量与文件加载配置,分清优先级 |
| 15.2 | 依赖注入与项目分层 | 手工做依赖注入,把服务按层装配起来 |
| 15.3 | 统一错误响应与输入校验 | 统一错误响应格式,在边界做输入校验 |
第六部分:交付(第 16–18 章)
最后一部分把服务交付出去:加日志、加指标、加健康检查,交叉编译、容器化、部署,最后用一个综合项目把全书串起来。它回答的是「代码写完之后,怎么保证它跑得稳、看得见、上得了线」。
| 编号 | 章节 | 说明 |
|---|---|---|
| 16.1 | log/slog 结构化日志 | 用 log/slog 输出可检索的结构化日志 |
| 16.2 | pprof 与 expvar 看运行时 | 用 pprof 与 expvar 观察内存、goroutine 与自定义指标 |
| 16.3 | 健康检查与指标端点 | 加上 /healthz 与 /metrics 端点供探针采集 |
| 17.1 | 交叉编译与静态构建 | 用 GOOS/GOARCH 交叉编译静态二进制并注入版本 |
| 17.2 | 多阶段 Docker 镜像 | 写多阶段 Dockerfile,把镜像压到最小 |
| 17.3 | 部署与优雅重启 | 写部署脚本,用信号实现优雅重启 |
| 18.1 | 需求梳理与架构设计 | 复盘 TaskAPI 的需求与架构取舍 |
| 18.2 | 端到端实现 | 端到端补全接口、存储、测试与文档 |
| 18.3 | 测试、打包与上线 | 跑通测试、打包镜像并完成上线演练 |
前置与附录
前置三篇负责交代背景与体例,附录四篇负责速查与排错。建议第一次通读时先跳过附录,遇到具体问题再回来翻。
| 位置 | 标题 | 说明 |
|---|---|---|
| 序 | 《Go 语言编程入门》序 | 为什么在 2026 年还值得系统学 Go,以及本书的写法取舍 |
| 前言 | 《Go 语言编程入门》前言 | 目标读者、前置知识、体例说明与版本口径 |
| 目录 | 《Go 语言编程入门》目录 | 全书导航与学习路径(即本页) |
| 附录 A | 附录 A.Go 语法与惯用法速查 | 类型、控制流、切片/map、结构体、接口、错误、泛型与并发原语速查 |
| 附录 B | 附录 B.标准库常用 API 速查 | 按用途分组的标准库包与常用函数签名 |
| 附录 C | 附录 C.go 命令与工具链速查 | go 子命令、环境变量、构建标志与多版本工具链 |
| 附录 D | 附录 D.常见错误与 FAQ | 高频报错的原文、原因与修法 |
常见问题速查
下面是读者最常问的几个「该读哪一节」的问题,直接给答案:
| 你的问题 | 去哪一节 |
|---|---|
| 装不上、多个 Go 版本搞混了 | 1.1 安装与工具链 |
| 中文标题切一半出现乱码 | 3.3 字符串、rune 与字节 |
| 往 map 里写就 panic | 3.2 map 与集合惯用法、附录 D |
| 改了切片,另一个变量也跟着变 | 3.1 数组、切片与扩容 |
| 报错 declared and not used | 2.1 变量、常量与基本类型、附录 D |
| 判断错误只能靠字符串比较 | 6.3 errors.Is/As 与自定义错误 |
| 循环导入导致编译失败 | 7.1 包的声明、导入与可见性 |
| 测试怎么写才不像一次性脚本 | 8.1 表驱动单元测试 |
| 程序并发跑,结果时对时错 | 11.3 用 -race 发现竞态 |
| 程序收到 Ctrl-C 后直接丢请求 | 12.3 优雅退出与信号处理 |
| 路由 404、参数取不到 | 13.1 Handler、ServeMux 与路由 |
| 连接池耗尽、查询很慢 | 14.1 database/sql 与驱动 |
| 二进制能不能在别的机器上跑 | 17.1 交叉编译与静态构建 |
| 不知道该不该引入某个第三方库 | 7.3 go get/tidy/vendor 与依赖治理 |
如果你遇到的问题不在表里,可以先用目录里的关键词搜索定位章节,再结合每节的「本节目标」判断是否命中。
读完本书之后
读完全书并不意味着结束。语言是一门需要在项目里持续打磨的手艺,真正让知识固化的,是你把它用在自己的代码上。给几条后续建议:
- 找一个真实项目练手。哪怕是一个小工具、一个小 API 服务,把它完整地用接口、错误处理与测试写一遍,收益远大于再读一遍书。
- 读一读标准库的源码。
net/http、slices、sync的实现本身就是优秀设计的范本,16.2 pprof 与 expvar 看运行时 教过你怎么观察运行时,接下来就该读源码。 - 把标准库吃透再引入第三方库。第 13、14、16 章展示的就是「只用标准库也能干活」的边界;越过这条边界时,才是有理由引入依赖的时候。
- 保持对「过度设计」的警惕。语言能力越强,越容易写出没人看得懂的抽象。记住本书反复强调的那条原则:可维护优先于巧妙。
如果你还想在某个单点上深挖,本站的 Go 专题文章是很好的补充——例如调度与内存模型、并发原语的取舍、性能剖析等方向。它们与本书是互补关系:本书负责按顺序打基础,专题负责就一个问题钻到底。
小结
这一页的核心信息可以浓缩成三句话:
- 结构上,全书是「前置 3 篇 + 六部分 18 章 54 节 + 附录 4 篇」,共 61 篇,围绕
TaskAPI一个项目逐章推进。 - 路径上,零基础按顺序读,有其他语言基础从第 4 章切入,急于能干活则集中读 8 节速成清单,已会用可当参考手册查。
- 方法上,每一节都遵循「本节目标 → 正文 → 小结 → 衔接 → 阅读导航」的五段式,任何一节都可以独立阅读。
如果你已经选好了路径,可以直接从对应的章节开始。每一节的末尾都会指向下一节,跟着走不会迷路。
祝你读得顺利。
最后再重复一句:本页不需要从头读到尾。它的作用是「在你需要的时候,三秒钟内把你送到正确的那一节」。把这一页加进书签,比记住任何章节编号都有用。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。