从 Go 语言、并发和标准库到数据库、服务工程、Linux 与云原生的后端学习路线。
Go 后端学习路线
Go 后端的主线是语言基础、并发模型和服务工程。先读懂标准库中的惯用写法,再理解数据库、 缓存、消息队列和部署体系,最后从完整服务中梳理各部分的协作关系。
不必在入门阶段同时理解所有中间件。先看懂 MySQL、Redis 和一种消息队列的核心机制, 其他组件可以在遇到具体场景后补充。
路线总览
| 阶段 | 核心内容 | 理解重点 |
|---|---|---|
| 1. Go 基础 | 语法、集合、函数、错误、模块 | 理解语法规则与惯用写法 |
| 2. 标准库与设计 | IO、文本、时间、HTTP、接口 | 看懂标准库常见代码与抽象 |
| 3. 并发与运行时 | Goroutine、Channel、调度、GC | 理解并发协作和运行时机制 |
| 4. 数据组件 | MySQL、Redis、消息队列 | 理解组件职责与数据流转过程 |
| 5. 服务工程 | API、安全、可观测性、性能 | 理解请求处理与服务治理链路 |
| 6. 系统基础 | 网络、操作系统、Linux | 理解基础原理与排障思路 |
| 7. 容器与部署 | Docker、Kubernetes、CI/CD | 看懂容器编排和发布配置 |
| 8. 项目理解 | CLI、业务 API、高并发服务 | 理解常见服务架构与关键取舍 |
1. Go 基础
语法与数据结构
- 掌握变量、常量、基本类型、控制流、函数和
defer。 - 理解零值、值语义、指针和 Go 的可见性规则。
- 区分数组、切片、map 和字符串,理解切片扩容与底层数组共享。
- 正确处理 Unicode 文本、map 查询和集合的
nil状态。
函数与错误
- 掌握多返回值、闭包、可变参数和方法。
- 使用
error表达失败,理解错误包装、errors.Is和errors.As。 - 明确
panic/recover的边界,不把 panic 当作普通业务分支。
模块与工具
- 使用
go mod管理模块、版本和依赖。 - 掌握
gofmt、go test、go vet和 race detector。 - 理解包、
internal目录和项目结构,不照搬其他语言的分层模板。
2. 标准库与接口设计
IO 与数据处理
- 使用
fmt、io、bufio、os、path/filepath处理输入输出和文件。 - 使用
strings、bytes、strconv、regexp处理文本。 - 掌握
time的时间计算、格式化、解析和时区。 - 使用
encoding/json编解码数据,并正确处理字段标签和可选值。
结构体、方法与接口
- 掌握结构体、方法、指针接收者与值接收者。
- 理解接口的隐式实现、方法集和
nil接口陷阱。 - 优先设计小接口,通过组合与依赖倒置提高可测试性。
- 使用泛型解决真正与类型相关的复用问题,避免无意义抽象。
Go 没有传统的类与继承体系。日常所说的“Go 面向对象”主要指结构体、方法、接口和组合, 重点是行为边界,而不是模拟类层次。
HTTP、Context 与测试
- 使用
net/http编写客户端、服务端和中间件。 - 使用
context传递取消、超时和请求范围的数据。 - 掌握表驱动测试、子测试、
httptest和 benchmark。 - 正确关闭响应体、控制连接池,并为外部请求设置超时。
3. 并发与运行时
Goroutine 与 Channel
- 理解 Goroutine、无缓冲 Channel、缓冲 Channel 和关闭规则。
- 使用
select处理多路通信、超时和取消。 - 能识别 Goroutine 泄漏、Channel 死锁和重复关闭。
同步与并发模式
- 掌握
Mutex、RWMutex、WaitGroup、Once和原子操作。 - 实现 worker pool、生产者消费者、fan-out/fan-in 和流水线。
- 通过
context统一并发任务的取消和错误传播。 - 使用 race detector 和压力测试定位数据竞争。
调度器与内存
- 理解 G-M-P 调度模型、抢占、系统调用和网络轮询器。
- 了解 Goroutine 栈增长、内存分配和逃逸分析。
- 理解 Go 内存模型中的 happens-before 与可见性。
- 谨慎使用
sync.Pool,先通过数据证明分配是瓶颈。
GC 与反射
- 理解 Go 并发标记清扫、三色标记和写屏障的基本思想。
- 了解
GOGC、内存限制和运行时指标对 GC 的影响。 - 使用
reflect完成类型检查和动态调用,并了解其性能与类型安全成本。
Go 当前主流垃圾回收器不是传统的分代回收器。学习重点应放在并发标记、分配速率、 堆目标和程序延迟之间的关系。
4. MySQL、Redis 与消息队列
MySQL
- 掌握表设计、约束、连接、聚合、子查询和常见 CRUD。
- 理解 B+Tree 索引、联合索引、覆盖索引、回表和执行计划。
- 掌握事务、隔离级别、锁、MVCC 和慢查询分析。
- 正确配置连接池、超时、事务边界和数据库迁移。
Redis
- 掌握字符串、哈希、列表、集合和有序集合。
- 理解过期、内存淘汰、持久化、复制、哨兵和集群。
- 处理缓存穿透、击穿、雪崩和数据库一致性问题。
- 使用 Redis 实现缓存、会话、限流或排行榜时明确数据生命周期。
消息队列
- 理解生产、消费、确认、重试、死信和消费组。
- 比较 Kafka 与 RabbitMQ 的消息模型和适用场景。
- 处理重复消费、幂等、顺序、积压和消息丢失。
- 了解 Outbox、补偿和最终一致性,不把消息队列当作自动一致性方案。
5. 服务工程
API 设计
- 设计清晰的 REST 资源、状态码、分页、过滤和错误格式。
- 完成参数校验、版本兼容和 OpenAPI 文档。
- 理解 WebSocket、SSE、gRPC 的特点和选择条件。
中间件与安全
- 实现请求 ID、结构化日志、异常恢复、超时和限流中间件。
- 掌握 Cookie/Session、JWT、OAuth 2.0 和常见权限模型。
- 防范注入、越权、敏感信息泄露和依赖供应链风险。
- 使用配置或密钥服务管理凭证,不在仓库中保存生产密钥。
可观测性与可靠性
- 建立日志、指标和分布式追踪,使用关联 ID 串联请求。
- 理解超时、重试、熔断、降级和优雅退出。
- 使用 OpenTelemetry 等标准接入可观测数据。
- 定义基础 SLI/SLO、告警和故障复盘流程。
性能分析
- 使用 pprof 分析 CPU、堆、Goroutine、锁和阻塞。
- 编写可信的 benchmark,关注执行时间和内存分配。
- 优先优化算法、IO、批处理、连接池和并发度,再考虑微观技巧。
6. 网络、操作系统与 Linux
计算机网络
- 理解 TCP/IP 分层、地址、路由、DNS 和 NAT。
- 掌握 TCP 连接、可靠传输、拥塞控制和连接关闭。
- 比较 HTTP/1.1、HTTP/2、HTTP/3、TLS、TCP 与 UDP。
- 会使用抓包和网络诊断工具分析一次完整请求。
操作系统
- 区分进程、线程、协程、上下文切换和系统调用。
- 理解虚拟内存、分页、缓存、同步、互斥和死锁。
- 掌握文件描述符、文件系统、IO 多路复用的基本原理。
Linux
- 熟练使用文件、目录、权限、文本处理和包管理命令。
- 使用
ps、top、ss、lsof、vmstat、iostat定位问题。 - 编写 Shell 脚本完成构建、部署、备份和日志处理。
- 使用
systemd和journald管理服务与日志。 - 了解防火墙、最小权限、用户隔离和系统安全更新。
可继续阅读 Linux 常用命令。
7. Docker、Kubernetes 与部署
Docker
- 理解镜像层、容器、网络、卷和资源限制。
- 编写多阶段 Dockerfile,减少镜像体积并使用非 root 用户运行。
- 使用 Compose 编排服务、数据库和本地开发环境。
- 了解镜像扫描、版本标记和制品管理。
可继续阅读 Docker 基础。
Kubernetes
- 掌握 Pod、Deployment、StatefulSet、DaemonSet、Job 的用途。
- 配置 Service、Ingress、ConfigMap、Secret 和健康检查。
- 理解滚动发布、回滚、调度、自动扩缩容和网络策略。
- 看懂常见部署、扩容和故障恢复配置。
CI/CD
- 理解测试、构建、镜像扫描、发布和部署流水线。
- 管理不同环境的配置、密钥和数据库迁移。
- 建立发布审批、回滚、备份恢复和容量评估机制。
8. 项目理解
阅读 Go 项目时,可以按复杂度关注以下类型:
- 并发命令行工具:理解配置、文件处理、并发控制、取消、重试和测试。
- 业务 API 服务:理解认证、MySQL、Redis、消息队列、幂等和可观测性。
- 高并发服务:理解容量目标、压测、pprof、缓存、降级和容器编排。
重点看懂:
- 请求如何经过路由、业务层、数据层和外部组件。
- 接口文档、数据库设计和架构图分别表达什么信息。
- 单元测试、集成测试和压测分别覆盖什么风险。
- Dockerfile、部署配置、监控指标和故障恢复如何协作。
- 技术选型、性能数据和故障复盘反映了哪些取舍。
学习取舍
- 标准库是 Go 学习主线,框架只用于提高业务开发效率。
- 并发不等于越多越快;并发度、超时、背压和退出机制必须一起设计。
- 数据库索引、事务和网络基础比记忆大量中间件命令更重要。
- Kubernetes 适合在单服务部署熟练后学习,不必作为入门前置条件。
- 性能优化必须以 benchmark、profile 和运行指标为依据。
评论