Easton Notes

从 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 项目时,可以按复杂度关注以下类型:

  1. 并发命令行工具:理解配置、文件处理、并发控制、取消、重试和测试。
  2. 业务 API 服务:理解认证、MySQL、Redis、消息队列、幂等和可观测性。
  3. 高并发服务:理解容量目标、压测、pprof、缓存、降级和容器编排。

重点看懂:

  • 请求如何经过路由、业务层、数据层和外部组件。
  • 接口文档、数据库设计和架构图分别表达什么信息。
  • 单元测试、集成测试和压测分别覆盖什么风险。
  • Dockerfile、部署配置、监控指标和故障恢复如何协作。
  • 技术选型、性能数据和故障复盘反映了哪些取舍。

学习取舍

  • 标准库是 Go 学习主线,框架只用于提高业务开发效率。
  • 并发不等于越多越快;并发度、超时、背压和退出机制必须一起设计。
  • 数据库索引、事务和网络基础比记忆大量中间件命令更重要。
  • Kubernetes 适合在单服务部署熟练后学习,不必作为入门前置条件。
  • 性能优化必须以 benchmark、profile 和运行指标为依据。

评论

On this page