《Go 语言编程入门》目录

《Go 语言编程入门》全书导航页:说明本书定位、读者画像与前置知识、三条学习路径与六个部分之间的依赖关系,并按六个部分列出 18 章 54 节的完整章节索引,另含序、前言、附录 A–D 与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。

《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.3Go 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.2map 与集合惯用法用 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.1error 接口与哨兵错误定义 ErrNotFound 与 ErrInvalidTitle,理解 error 是接口
6.2fmt.Errorf 与 %w 包装用 %w 包装错误,在每一层保留上下文
6.3errors.Is/As 与自定义错误用 Is/As 判定错误类别,设计自定义错误类型

第三部分:工程化(第 7–9 章)

这一部分把「能跑的代码」升级为「能维护的工程」:怎么拆包、怎么管依赖、怎么测试、怎么用泛型消除重复。它回答的是「代码写出来之后,怎么保证它长期可维护、可验证」。

编号章节说明
7.1包的声明、导入与可见性拆包为 internal/task、internal/store、cmd/taskapi
7.2go.mod/go.sum 与最小版本选择理解最小版本选择(MVS)与 go.sum 的校验作用
7.3go get/tidy/vendor 与依赖治理治理依赖:掌握 tidy、vendor 与版本约束
8.1表驱动单元测试为 store 与校验写表驱动测试
8.2基准测试与覆盖率用 benchmark 与 -cover 量化性能与覆盖
8.3测试替身与接口 mock用 fake store 替换真实依赖,隔离被测逻辑
9.1类型参数与约束定义泛型 Page[T] 分页结果,理解类型参数与约束
9.2slices/maps/cmp 标准库用标准库泛型容器重写查询与聚合
9.3泛型的取舍判断何时该用泛型、何时该用接口

第四部分:并发(第 10–12 章)

这一部分进入 Go 最标志性的能力:并发。它讲清 goroutine、channel、同步原语与 context 四件事,目标不是让你成为调度专家,而是让你能写出并发安全、可取消、可退出的服务代码。深度到此为止,更底层的内容留给高级卷。

编号章节说明
10.1goroutine 与调度直觉起一个后台 worker,理解 goroutine 的轻量与调度直觉
10.2channel 与 select用 channel 做任务队列,用 select 做多路等待
10.3worker pool 与 pipeline组装 worker pool 与 pipeline 批量处理到期任务
11.1Mutex/RWMutex 与 atomic用 RWMutex 保护 store,用 atomic 做无锁计数
11.2WaitGroup/Once/sync.Map用 WaitGroup、Once 与 sync.Map 协调并发
11.3用 -race 发现竞态用竞态检测器验证并发安全,读懂它的报告
12.1context 的取消与传播让请求级 context 贯穿调用链,逐层响应取消
12.2超时、截止时间与 WithValue用 WithTimeout/WithDeadline 控制生命周期,慎用 WithValue
12.3优雅退出与信号处理用 Ctrl-C 信号触发优雅排空,不丢在途请求

第五部分:Web(第 13–15 章)

这一部分把前面所有能力组装成一个真正的 Web 服务:用 net/http 暴露 REST 接口,用 database/sql 接数据库,用分层与配置把代码组织清楚。它回答的是「一个能被别人调用的服务,长什么样」。

编号章节说明
13.1Handler、ServeMux 与路由用 net/http 暴露 /tasks 的 CRUD 接口
13.2请求解析、JSON 与响应解析请求体、编码 JSON 响应与设置状态码
13.3中间件与访问日志用中间件链组织横切逻辑与访问日志
14.1database/sql 与驱动接入数据库,理解连接池、预处理与驱动注册
14.2SQL 增删改查与事务写出增删改查与事务,正确处理行与错误
14.3schema 迁移与 sqlc用迁移管理 schema,用 sqlc 生成类型安全查询
15.1配置加载(flag/env/文件)用 flag、环境变量与文件加载配置,分清优先级
15.2依赖注入与项目分层手工做依赖注入,把服务按层装配起来
15.3统一错误响应与输入校验统一错误响应格式,在边界做输入校验

第六部分:交付(第 16–18 章)

最后一部分把服务交付出去:加日志、加指标、加健康检查,交叉编译、容器化、部署,最后用一个综合项目把全书串起来。它回答的是「代码写完之后,怎么保证它跑得稳、看得见、上得了线」。

编号章节说明
16.1log/slog 结构化日志用 log/slog 输出可检索的结构化日志
16.2pprof 与 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 里写就 panic3.2 map 与集合惯用法、附录 D
改了切片,另一个变量也跟着变3.1 数组、切片与扩容
报错 declared and not used2.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 节速成清单,已会用可当参考手册查。
  • 方法上,每一节都遵循「本节目标 → 正文 → 小结 → 衔接 → 阅读导航」的五段式,任何一节都可以独立阅读。

如果你已经选好了路径,可以直接从对应的章节开始。每一节的末尾都会指向下一节,跟着走不会迷路。

祝你读得顺利。

最后再重复一句:本页不需要从头读到尾。它的作用是「在你需要的时候,三秒钟内把你送到正确的那一节」。把这一页加进书签,比记住任何章节编号都有用。

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「golang」更多文章

  1. 《Go 语言编程实战》目录
  2. 《Go 语言编程实战》18.3 上线、观测与迭代
  3. 《Go 语言编程实战》18.2 故障演练