posts

《Go 语言编程入门》 · 全书目录与章节索引(61 篇)

《Go 语言编程入门》全 61 篇,以 TaskAPI 一个贯穿全书的项目为主线,从安装工具链、语言基础、结构体与接口、错误处理、包与模块、测试与泛型,讲到 goroutine 与 channel、同步与竞态、context 生命周期,再到用 net/http 搭服务、数据持久化、配置分层、可观测性、交叉编译与容器化交付。示例基于 Go 1.27 在本机实跑,本页给出全书分章目录。

《Go 语言编程入门》全 61 篇,是一套以一个真实项目为主线的 Go 入门书:从第 1 章 go mod init taskapi 起,到第 18 章打包上线,TaskAPI 会一路长大——内存版存储、拆包分层、接口抽象、并发安全、HTTP 服务、数据库持久化、优雅退出、容器化交付。所有示例基于 Go 1.27 在本机实跑,关键结论以真实输出为准。

本页是《Go 语言编程入门》的全书目录:按章节顺序列出全部 61 篇,点击标题直达正文。也可以从各节末尾的「阅读导航」按顺序通读,或先看目录篇 里的三条学习路径与八周计划。

全书概览

项目内容
书稿《Go 语言编程入门》
篇数61 篇(正文 18 章 54 节 + 目录篇 + 序 + 前言 + 附录 A–D)
领域Go 语言从零到可交付服务
贯穿项目TaskAPI —— 一个任务管理 HTTP 服务,18 章逐步长大
阅读方式从目录篇 进入按顺序通读,或按查漏场景跳读
实测版本Go 1.27.0(本机 GOTOOLCHAIN=go1.27.0 实跑;官方最新 stable 为 1.27.2)
依赖正文只用标准库,不引入任何第三方依赖
上级专题书稿专题

全书目录

前置

节文章核心内容
—目录与学习路径全书导航页:读者定位、三条学习路径与八周计划、六部分依赖关系与 54 节逐节索引
—序更高视角:Go 在 2026 年的生态定位、为什么值得系统学、常见误解与心智模型
—前言本书怎么来的、写给谁、六部分结构、版本与排版约定、本书不写什么
附 A附录 A.Go 语法与惯用法速查类型、变量、控制流、函数与 defer、切片、map、字符串、结构体、接口、错误、泛型、并发 12 张表 + 可运行片段
附 B附录 B.标准库常用 API 速查strings / strconv / bytes / time / encoding/json / os / io / fmt / errors / slices / maps / cmp / sync / context / net/http / log/slog 等按「想做什么 → 用哪个函数」组织,签名经 go doc 逐条核实
附 C附录 C.go 命令与工具链速查go build/run/test/vet/fmt/mod/get/work/generate/doc/env、GOTOOLCHAIN 多版本、环境变量与构建标志、交叉编译
附 D附录 D.常见错误与 FAQ15 条报错与 FAQ:declared and not used、cannot use x as T、nil map 写入、切片别名、goroutine 泄漏、context deadline exceeded、missing go.sum entry、import cycle not allowed、中文按字节切片乱码……每条给最小复现

第一部分:起步(第 1–3 章)

节文章核心内容
1.11.1 安装与工具链多版本共存与 GOTOOLCHAIN 协商、go env 关键项、GOPROXY、gofmt 与 go vet 的位置
1.21.2 第一个程序与 go run/buildgo run 与 go build 的差别、go version -m 读出构建信息、go install 落 GOBIN、os.Args 实测
1.31.3 Go Modules 与项目骨架go mod init 的产物、go list 系列、go mod tidy/verify/graph;实测只有标准库时不生成 go.sum
2.12.1 变量、常量与基本类型零值、短变量声明、iota、strconv.IntSize、float32/64 精度差、uint8 回绕、unsafe.Sizeof 宽度
2.22.2 控制流与循环if 初始化语句、三段式与 while 式 for、range、带标签 break、无表达式 switch、进程退出码
2.32.3 函数、多返回值与 defer多返回值与命名返回值、可变参数、defer 的 LIFO、defer 参数立即求值 vs 闭包延迟求值
3.13.1 数组、切片与扩容数组的值语义、切片共享底层数组、append 扩容轨迹(cap 0→4→8→16)、三索引切片修复污染、copy、slices 泛型函数
3.23.2 map 与集合惯用法comma-ok、遍历顺序随机、不可寻址与不可比较键的编译错误原文、maps/slices 组合用法
3.33.3 字符串、rune 与字节len 与 RuneCountInString 的差、按字节切出非法 UTF-8、range 解码 rune 与偏移、strings.Builder、中文标题处理

第二部分:建模(第 4–6 章)

节文章核心内容
4.14.1 结构体定义与初始化字段名/位置/new 三种初始化、零值可用、可比较性、匿名结构体、内存对齐与值传参 vs 指针传参
4.24.2 方法与值/指针接收者值接收者改副本、指针接收者改本体、map 元素不可寻址、方法值与方法表达式、nil 指针接收者的安全用法
4.34.3 组合与嵌入字段与方法提升、指针嵌入、同层冲突 ambiguous、遮蔽规则、多级嵌入
5.15.1 接口定义与隐式实现隐式实现、编译期断言 var _ I = (*T)(nil)、指针接收者与方法集、typed-nil 接口 == nil 为 false
5.25.2 类型断言与 type switch单值/双值断言、nil 接口安全、断言到接口、type switch 的 case 顺序、%T 诊断
5.35.3 接口设计惯用法接口嵌入、接口隔离(大接口拆小)、接受接口返回结构体、在调用方定义接口
6.16.1 error 接口与哨兵错误errors.New 哨兵、比较语义、switch err 分派、忽略错误的代价
6.26.2 fmt.Errorf 与 %w 包装%v 与 %w 文本相同但 errors.Is 结果相反、Unwrap 链、多 %w 与 errors.Join
6.36.3 errors.Is/As 与自定义错误errors.Is 判根因、errors.As 取具体类型、自定义 Is 按状态码判断、As 匹配接口

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

节文章核心内容
7.17.1 包的声明、导入与可见性导出规则与命名、internal 边界(实测复现 use of internal package ... not allowed)、循环导入
7.27.2 go.mod/go.sum 与最小版本选择go mod edit 系列、最小版本选择(MVS)、go mod graph 与 why -m、GOPROXY 与本地 replace
7.37.3 go get/tidy/vendor 与依赖治理go mod vendor 产物与 -mod=vendor、go mod verify、go work 多模块工作区
8.18.1 表驱动单元测试表驱动结构与子测试 t.Run、-run 过滤、-short 跳过长用例
8.28.2 基准测试与覆盖率-benchmem 的 ns/op 与 allocs/op、-benchtime/-count、-coverprofile 与 go tool cover -func
8.38.3 测试替身与接口 mock手写 fake 优于引入 mock 库、依赖接口而非具体类型、错误传播路径的测试
9.19.1 类型参数与约束类型参数、约束接口、~ 近似类型、cmp.Ordered,签名经 go doc 核实
9.29.2 slices/maps/cmp 标准库slices.SortFunc/Contains/IndexFunc/Compact/DeleteFunc、maps.Keys/Clone/Equal、cmp.Or 的实战用法
9.39.3 泛型的取舍何时该用泛型、何时接口更合适、泛型类型别名、约束过度与可读性代价

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

节文章核心内容
10.110.1 goroutine 与调度直觉goroutine 为何比线程轻、启动成本量级、循环变量捕获、NumGoroutine 与栈量测量
10.210.2 channel 与 select有缓冲 channel 的 len/cap、close 后的接收语义、向已关闭 channel 发送会 panic、nil channel 永久阻塞、select 多路
10.310.3 worker pool 与 pipeline固定 worker 数与无限制并发的耗时对比、pipeline 阶段串联、fan-out/fan-in
11.111.1 Mutex/RWMutex 与 atomic并发写 map 的致命错误、RWMutex 保护存储、atomic.Int64 类型化封装与 CAS、go vet 传值告警
11.211.2 WaitGroup/Once/sync.MapWaitGroup.Go、Once/OnceValue/OnceValues、sync.Map 与 RWMutex+map 的基准对比与选择依据
11.311.3 用 -race 发现竞态真实 DATA RACE 报告逐行解读、退出码 66、-race -count 放大偶发竞态、加锁后的对照基准
12.112.1 context 的取消与传播取消树与 Done 通道、批量任务返回已完成数、goroutine 泄漏计数、go vet 的 lostcancel
12.212.2 超时、截止时间与 WithValueDeadlineExceeded、deadline 继承、WithTimeoutCause + context.Cause、AfterFunc、WithoutCancel、key 类型选择
12.312.3 优雅退出与信号处理signal.Notify 与 NotifyContext、在途请求排空、退出码 0 与被信号杀死的 143 对比

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

节文章核心内容
13.113.1 Handler、ServeMux 与路由方法感知路由与 r.PathValue、405/404 的自动行为、httptest 的两种用法
13.213.2 请求解析、JSON 与响应SetEscapeHTML 默认转义、Encoder 自动追加换行、DisallowUnknownFields、WriteHeader 二次调用被忽略
13.313.3 中间件与访问日志用包装 ResponseWriter 记录状态码与字节数、requestID 经 context 传递、recover 中间件、中间件顺序导致的「panic 请求没有访问日志」效应
14.114.1 database/sql 与驱动sql.Open 惰性建连、连接池 Stats、Prepare 复用、用纯标准库实现 driver.Driver 演示全链路
14.214.2 SQL 增删改查与事务用 RowsAffected 判存在、sql.ErrNoRows 翻译为领域错误、BeginTx + defer Rollback + Commit、只读事务
14.314.3 schema 迁移与 sqlc//go:embed + fs.ReadDir 发现迁移文件、按版本排序、sqlc 生成代码的形态(本机未装 sqlc,文中已明确标注)
15.115.1 配置加载(flag/env/文件)flag / env / JSON 文件 / 默认值的四级合并、fs.Visit 区分「显式设置」与「默认值」、fail-fast 校验
15.215.2 依赖注入与项目分层接口边界与适配器、service 依赖接口而非实现、composition root 手工装配
15.315.3 统一错误响应与输入校验用 errors.Is/As 把领域错误映射为状态码、多字段校验结果收集、httptest 断言四种状态码

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

节文章核心内容
16.116.1 log/slog 结构化日志JSON/Text Handler、With/WithGroup、LogValuer、LevelVar 动态调级、ReplaceAttr 改写键
16.216.2 pprof 与 expvar 看运行时/debug/pprof/ 抓取与 go tool pprof -top、runtime/pprof 离线采样、expvar 暴露自定义变量
16.316.3 健康检查与指标端点/healthz 与 /readyz 的语义差别、按 Prometheus 文本格式暴露 /metrics
17.117.1 交叉编译与静态构建GOOS/GOARCH 交叉编译、-trimpath -ldflags "-s -w -X" 注入版本、//go:embed、用 file 验证产物
17.217.2 多阶段 Docker 镜像golang:1.27-alpine 构建阶段 + 最小运行阶段、非 root(uid 10001)、镜像约 21.5 MB(本机 Docker 实跑)
17.317.3 部署与优雅重启收到 TERM 后排空在途请求的真实时序、systemd 单元与部署脚本(macOS 无法执行,文中已声明)
18.118.1 需求梳理与架构设计全卷复盘:需求与边界、分层与依赖方向、容量与取舍、哪些设计是被后续章节逼出来的
18.218.2 端到端实现串起全卷的完整链路:go vet、go test -race -cover、完整 curl 链路(POST/PATCH/GET/DELETE/404/422)与全链路日志
18.318.3 测试、打包与上线go tool cover -func 逐函数覆盖率、release 脚本、shasum -a 256 校验、CI YAML 形态(未执行)

怎么用这份索引

相关阅读

全部文章 Golang Game SaaS Rust Python Java 游戏开发 客户端开发 GameDev Typescript
golang

《Go 语言编程入门》7.1 包的声明、导入与可见性

本节把 TaskAPI 从单文件拆成 internal/task、internal/store、cmd/taskapi 三个包:先讲清 package 声明与目录的对应关系、import 路径的解析与分组,再说明标识符大小写如何决定导出可见性、internal/ 目录为何能挡住模块外的引用,最后给出包命名规范与循环导入的排查思路。读完你能为自己的项目划出清晰的包边界。

6 分钟阅读
Go Go 语言编程入门 包管理