《Go 语言编程实战》目录
《Go 语言编程实战》全书导航页:说明本书与卷一《Go 语言编程入门》的分工、读者画像与前置知识、三条学习路径与五个部分之间的依赖关系,并按五个部分列出 18 章 54 节的完整章节索引,另含贯穿项目 TaskHub 从单模块到集群部署的推进路线与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。
category
《Go 语言编程实战》全书导航页:说明本书与卷一《Go 语言编程入门》的分工、读者画像与前置知识、三条学习路径与五个部分之间的依赖关系,并按五个部分列出 18 章 54 节的完整章节索引,另含贯穿项目 TaskHub 从单模块到集群部署的推进路线与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。
全书的最后一步是把 TaskHub 真正推到用户面前并让它长期变好。本节给出上线 Go/No-Go 清单、观测三支柱的接线,并用本机真跑的一段中间件演示:1000 次请求中注入 10 个错误,实测 1001 个请求、10 个错误、可用性 99.001%,据此判定错误预算是否耗尽;最后用「假设-实验-度量-决策」闭环收束全卷 18 章。
「高可用」不能靠假设,只能靠演练验证。本节真的把 TaskHub 的依赖停掉、注入延迟、再恢复,用真实数据检验它的失败行为:docker stop 掉 Postgres 后 30 次查询全部快速失败(1~3ms,无挂起),恢复后 30/30 成功;代码注入 2 秒延迟后 200/200 请求在 500ms 超时处被截断,P99 从 6ms 升到 508ms。
上线前的最后一道算术题是「这台机器到底能扛多少」。本节用本机真实的基准数据(M1 Pro 上 536.6 ns/op、1 alloc/op,并发 8 路 135.7 ns/op)做架构复盘与容量规划:从实测吞吐推算单副本容量,用安全系数与依赖瓶颈算出需要的副本数,并给出成本与冗余的权衡表。
本附录把 Go 学习与实战中最常见的错误按「报错原文 → 原因 → 修法」整理:declared and not used、类型不匹配、nil map 写入、切片别名、goroutine 泄漏、context deadline exceeded、module path 不匹配、missing go.sum entry、import cycle 与中文乱码,每条都给出最小复现代码与修法。
本附录整理 go 命令与工具链的用法:build/run/test/vet/fmt/mod/get/work/generate/doc/env 各子命令、GOTOOLCHAIN 多版本、GOOS/GOARCH/CGO_ENABLED/GOFLAGS/GOPROXY 等环境变量,以及 -ldflags/-gcflags/-race/-cover 等构建标志,命令与输出均在 go1.27.0 实测。
本附录按「想做什么 → 用哪个包哪个函数」整理 Go 标准库常用 API:strings、strconv、bytes、time、encoding/json、os、io、fmt、errors、slices、maps、cmp、sync、context、net/http 与 log/slog,函数签名均用 go doc 在本机 go1.27.0 上核实,并配可运行的最小示例。
本附录把全书用到的 Go 语法与惯用法压缩成一组速查表:类型与零值、变量与常量、控制流、函数与 defer、切片与 map、字符串与 rune、结构体与方法、接口、错误处理、泛型与并发原语,每段片段都按「想做什么 → 怎么写」组织,并在 go1.27.0 上实测输出。
《Go 语言编程入门》全书导航页:说明本书定位、读者画像与前置知识、三条学习路径与六个部分之间的依赖关系,并按六个部分列出 18 章 54 节的完整章节索引,另含序、前言、附录 A–D 与常见问题速查表,方便读者按需定位、跳读与随时查阅全书。
《Go 语言编程入门》的序。从 Go 今天在语言生态中的位置谈起,说明站内既有的 Go 专题做的是「单点深挖」、这本书补的是「从零到能干活」的递进路径,并交代本书的三个刻意取舍、对「Go 啰嗦」等常见误解的回应,以及不同起点的读者该从哪一章进入这趟旅程。
《Go 语言编程入门》前言:说明本书的目标读者与前置知识、六部分 18 章的结构分工、每一节的组织方式、代码与工具链约定、Go 1.27 的版本基线与三种阅读路径,并给出各部分的学习时长估算,以及发现疏漏时该如何提交勘误与反馈意见,方便你快速建立对全书的整体预期。
为 TaskAPI 收口上线:跑 vet 与 -race 测试、看逐函数覆盖率、写发布构建脚本产出多平台静态二进制、打包 tar.gz 并生成 sha256 校验和,配发布检查清单与上线后验证,最后回顾全卷 18 章的演进与下一步学习方向。
把 TaskAPI 的四层装配成完整链路并实跑:从 main 的手工 DI 到 httpapi 的路由、store 的实现、领域校验,补齐 PATCH/DELETE 与统一错误响应,用 -race 跑测试、用 curl 走一遍创建到删除的端到端,复盘装配顺序与并发安全的关键决策。
对 TaskAPI 做一次完整复盘:从用户故事与非功能需求出发,梳理分层架构、包边界与 HTTP 契约,回顾从第 1 章到第 17 章的演进轨迹,并逐条复盘关键架构取舍——接口抽象的判据、内存到数据库的平滑迁移、错误分层与并发安全,最后列出收口清单。
审计日志回答的是「谁在什么时候对什么做了什么」,而它本身也是攻击目标。本节把 TaskHub 的审计落成防篡改的哈希链:本机真实跑通写入 3 条记录校验通过,再改写第 2 行结果字段,校验立刻报「第 2 行内容被篡改」;并给出审计与业务日志的分离、保留期与合规映射。
加密的目标是「数据即使被截获或拖库也读不出」。本节把 TaskHub 的传输与存储两条链路都落成可运行代码:用真实握手演示强制 TLS 1.3 如何拒绝只支持 1.2 的客户端,用 AES-GCM 把 32 字节明文加密成 60 字节并验证篡改必然失败,用 bcrypt 演示同口令两次哈希不同、校验正确。
多租户系统里,一个没校验的查询参数就可能让 A 租户读到 B 租户的数据。本节用真实 Postgres 容器跑通两段对照实验:字符串拼接的查询被注入读到 2 行(越权),参数化查询命中 0 行(挡下);再用 html/template 演示输出转义,并给出白名单校验、命令注入与路径穿越的防护清单。
把 TaskAPI 真正部署到服务器:写 systemd 单元托管进程、用软链与健康门控的脚本切换版本、把第 12 章的优雅关闭接到 SIGTERM 上,并实测「发信号后排空在途请求再退出」的完整时序,最后讨论多实例滚动与套接字传递两种零停机思路。
把 TaskAPI 打成最小 Docker 镜像:写多阶段 Dockerfile,构建阶段用 golang:1.27-alpine 编译静态二进制、运行阶段用 alpine 只装产物,配 .dockerignore 与层缓存,用非 root 用户运行,并实测镜像体积、容器日志与端点响应。
把 TaskAPI 编译成能上服务器的产物:用 GOOS/GOARCH 在 Mac 上交叉编译出 Linux 二进制、用 CGO_ENABLED=0 做静态链接、用 -trimpath 与 -ldflags 注入版本号并瘦身,再用 file 与 go version -m 核对产物,最后写成可复用的构建脚本。