学习原则
- 先用 Go Modules 和标准库写出能交付的小服务,再补框架。
- 并发学习以 context、channel、sync 和 race detector 为主线。
- 每个阶段都要写测试,后期加入 fuzzing 与 govulncheck。
- 生产能力重点看可观测性、部署、依赖安全和故障处理。
环境、工具链与模块化
第 1-2 周
先把开发环境、编辑器、模块依赖和命令行工作流搭稳,避免还没写业务就被路径和依赖绊住。
目标:能独立创建模块、运行测试、安装工具、管理多模块 workspace。
安装与编辑器
- 安装当前稳定版 Go,使用 go version 验证。
- VS Code + Go 插件 + gopls + dlv,或 GoLand。
- 理解 GOROOT、GOPATH、GOBIN、PATH 的角色。
Go Modules
- go mod init、go get、go mod tidy、go list -m -u all。
- 理解 go.mod、go.sum、语义化版本与 module path。
- 国内环境配置 GOPROXY,私有仓库配置 GOPRIVATE。
工作区与工具
- go work init/use 管理多模块联调。
- go fmt、go test、go test -race、go vet、go install。
- 建立 Makefile 或 taskfile,固化常用命令。
练习:创建 hello-api 模块,加入一个本地 util 模块,用 go work 联调,并写一个 Makefile。
go env -w GOPROXY=https://goproxy.cn,direct
mkdir hello-api && cd hello-api
go mod init example.com/hello-api
go test ./...
语法基础与 Go 编程习惯
第 2-4 周
掌握 Go 的基本语法、错误处理和组合式设计,目标不是背语法,而是写出自然、可维护的 Go 代码。
目标:能写清晰的小型命令行程序,并理解值、指针、接口和错误处理的边界。
基础语法
- 变量、常量、iota、基本类型、零值、类型转换。
- if、for、switch、for range、defer。
- 数组、切片、map、struct、method。
函数与错误
- 多返回值、闭包、函数作为参数。
- error、errors.Is/As、fmt.Errorf("%w")。
- panic/recover 只用于不可恢复场景。
接口与组合
- 小接口优先,调用方定义接口。
- 组合优于继承,embedding 的适用边界。
- 理解 nil interface、type assertion、type switch。
练习:写一个日志清洗 CLI:读取文件、统计关键词、输出 JSON,并为核心函数补测试。
泛型、反射与包设计
第 4-6 周
学会在不滥用抽象的前提下复用代码。泛型适合类型安全的容器/算法,反射适合框架边界。
目标:能判断什么时候用接口、泛型、反射,以及什么时候直接写重复代码更好。
泛型 Generics
- 类型参数、约束、comparable、~T 类型集。
- 泛型函数、泛型类型、方法限制。
- 避免把泛型当成继承体系来设计。
反射 Reflect
- reflect.Type、reflect.Value、CanSet。
- 结构体 tag、JSON/ORM 校验场景。
- 性能与可读性成本评估。
包与 API 设计
- internal、cmd、pkg 的边界。
- 避免循环依赖,保持包名短小明确。
- 面向用例组织代码,而不是面向技术层堆目录。
练习:实现一个泛型 LRU Cache,并提供非泛型接口适配层。
并发编程与运行时心智模型
第 6-8 周
Go 的并发不是“开 goroutine 越多越好”。核心是生命周期、取消、背压、共享状态和可观测。
目标:能写不会泄漏 goroutine、可取消、可测试的并发程序。
并发基础
- goroutine、channel、select、close。
- sync.Mutex、RWMutex、WaitGroup、Once、Pool。
- atomic、竞态条件、go test -race。
Context 与模式
- context.WithCancel/Timeout/Deadline。
- worker pool、fan-in/fan-out、pipeline。
- 超时、重试、限流和优雅退出。
性能与运行时
- GMP 调度模型、逃逸分析、GC 基础。
- pprof、trace、benchmark。
- 理解 GOMEMLIMIT、GOMAXPROCS 的使用场景。
练习:写一个并发 URL 抓取器:支持超时、限流、重试、取消和结果汇总。
标准库、文件网络与数据处理
第 8-10 周
Go 的标准库足够完成大量生产任务。先熟标准库,再决定是否引入第三方依赖。
目标:能用标准库完成 HTTP、JSON、文件、时间、加密、压缩和命令行处理。
IO 与数据
- io、os、bufio、embed、path/filepath。
- encoding/json、encoding/csv、xml、yaml 第三方库。
- time、strings、strconv、regexp、sort。
网络与协议
- net/http client/server、Transport、Timeout。
- url、httptest、httptrace。
- TLS、x509、crypto/rand、hash。
命令行与配置
- flag、os.Args、环境变量。
- cobra/viper 可选,但先理解标准库。
- 日志结构化:log/slog。
练习:做一个 HTTP 文件同步工具:读取配置、并发上传、失败重试、输出结构化日志。
Web API、数据库与缓存
第 10-14 周
从能跑的 API 进阶到能维护的服务:路由、参数校验、数据库事务、缓存一致性和错误响应。
目标:能独立交付一个带鉴权、数据库、缓存和测试的 REST API。
HTTP 服务
- 标准库 net/http 与 Gin/Echo/Fiber 的取舍。
- 路由、中间件、参数绑定、统一错误响应。
- CORS、JWT/session、限流、幂等。
数据库
- database/sql、连接池、事务、预编译。
- MySQL/PostgreSQL 索引、EXPLAIN、慢查询。
- GORM/sqlc/ent 的适用场景。
缓存与消息
- Redis key 设计、过期、穿透/击穿/雪崩。
- 消息队列:Kafka/NATS/RabbitMQ 基础。
- 缓存一致性与最终一致性。
练习:实现一个博客/课程 API:用户登录、文章 CRUD、标签查询、Redis 缓存、MySQL 事务。
测试、安全与质量工程
第 14-16 周
能上线的 Go 服务必须可测试、可升级、可发现依赖漏洞。这里是从“会写”到“可靠”的分水岭。
目标:建立单元测试、集成测试、fuzzing、依赖扫描和 CI 质量门禁。
测试体系
- testing、table-driven tests、httptest。
- mock/fake、testcontainers、覆盖率。
- benchmark、race detector、性能回归。
Fuzzing
- go test -fuzz 发现边界输入和安全问题。
- 为解析器、编码器、权限判断补 fuzz tests。
- 把崩溃样例沉淀为回归用例。
依赖安全
- govulncheck 扫描真实影响到代码路径的漏洞。
- go list -m -u all 定期发现依赖更新。
- CI 中加入 go vet、staticcheck、golangci-lint。
练习:给博客 API 补完整测试:handler、repository、fuzz slug/parser、govulncheck CI。
微服务、RPC 与云原生部署
第 16-20 周
把单体服务拆成可观测、可发布、可回滚的服务体系,而不是为了“微服务”而微服务。
目标:能设计 gRPC 服务,容器化部署,并接入日志、指标、链路追踪。
RPC 与服务治理
- gRPC、Protobuf、gateway、错误码。
- 服务发现、配置中心、熔断、限流、重试。
- go-zero、Kratos、ConnectRPC 的取舍。
容器与部署
- Docker 多阶段构建、distroless/scratch 镜像。
- Kubernetes Deployment、Service、Ingress、ConfigMap、Secret。
- 灰度发布、滚动升级、健康检查。
可观测性
- slog 结构化日志、Prometheus 指标、Grafana 看板。
- OpenTelemetry tracing、pprof 暴露与保护。
- SLO、告警、容量规划与压测。
练习:把博客 API 拆成 user/content 两个服务,使用 gRPC 通信,部署到 Docker Compose 或 K8s。
性能优化与源码阅读
第 20-22 周
性能优化先测量再行动。源码阅读不追求全背下来,重点理解标准库和运行时的关键路径。
目标:能定位 CPU、内存、锁竞争和 goroutine 泄漏,并写出优化前后的证据。
性能工具
- benchmark、pprof、trace、execution tracer。
- 逃逸分析、内联、分配优化、sync.Pool。
- 火焰图、压测报告、性能预算。
源码重点
- net/http、context、sync、time、encoding/json。
- runtime scheduler、GC、map、channel。
- 从问题出发读源码,而不是从第 1 行开始读。
生产排障
- 内存上涨、接口延迟、连接池耗尽、锁竞争。
- 日志、指标、trace 三件套联动。
- 复盘文档与自动化回归测试。
练习:为已有 API 做一次压测和 pprof 分析,提交优化报告与代码改动。
项目作品集与求职面试
第 22-24 周
最后阶段把知识变成可展示的作品。项目要能跑、能测、能部署、能解释取舍。
目标:形成 2-3 个可展示项目和一份清晰的技术复盘。
作品集项目
- 短链系统:高并发读写、缓存、限流、统计。
- 任务队列:延迟任务、重试、死信、监控。
- 实时通知/IM:WebSocket、推送、在线状态。
面试重点
- slice/map/channel/interface 底层与常见坑。
- context、并发控制、GC、pprof、MySQL/Redis。
- 项目中遇到的真实问题、指标和权衡。
交付标准
- README、架构图、部署脚本、接口文档。
- 测试覆盖、CI、lint、govulncheck。
- 线上演示或 Docker Compose 一键启动。
练习:选择一个作品集项目上线,写一篇复盘:需求、架构、性能、踩坑、改进计划。
资料来源
基于 go.dev 官方教程、Release History、Modules、Generics、Fuzzing 与 govulncheck 文档整理。