阶段 0:语法扫盲(1 天)
项目:mini-games
内容:把《Go Tour》跑完,再写 3 个 100 行以内的小脚本
- 并发计算 π 值(goroutine + channel)
- 并发下载 10 张图片(errgroup)
- 命令行打字游戏(time、bufio、sync)
目的:把 channel、goroutine、interface、error 处理写顺手。
阶段 1:TCP 聊天室(3 天)
项目:go-tcp-chat
目标:学会
- 原生 net 包、TCP 粘包拆包、go 程池、广播
MVP:
- 自定义简单协议(包头 4B 长度 + JSON 体)
- 支持 /nick 改名、/list 列出在线玩家
- 10 个客户端并发,服务端不 crash
加分:
- 集成 Prometheus metrics(在线人数、消息 QPS)
- Dockerfile 一键启动
代码量:≈ 500 行
阶段 2:HTTP 账号系统(4 天)
项目:go-account-server
目标:学会
- RESTful、JWT、GORM、MySQL、Redis 缓存、单元测试
MVP:
- 注册 / 登录 / 刷新 Token / 查询角色列表
- 密码 bcrypt 加密,JWT 有效期 15 min,刷新 Token 存 Redis
- 单测覆盖 >60%(用 sql-mock 不连真库)
加分:
- 邮箱验证码注册
- 限流中间件(令牌桶)
代码量:≈ 1 k 行
阶段 3:WebSocket 大厅 + 房间(5 天)
项目:go-game-lobby
目标:学会
- gorilla/websocket、广播、房间管理、并发安全
MVP:
- 玩家登录后进入大厅,可创建 / 加入 / 离开房间
- 房间内发消息实时广播,掉线自动清理
- 支持心跳(ping/pong),服务端能踢掉 30s 无响应玩家
加分:
- 集成 etcd 做分布式房间注册(为后面网关做准备)
- 用 go:embed 把前端页面打进去,一键运行
代码量:≈ 1.5 k 行
阶段 4:回合制棋牌逻辑服(7 天)
项目:go-doudizhu-server
目标:学会
- 状态机、事件驱动、断线重连、日志追踪
MVP:
- 斗地主规则(发牌、叫分、出牌、结算)
- 三张表:user、room、game_record(记录每一局 JSON)
- 断线重连后能拉回当前牌面
- 用 zap 打日志,每局生成唯一 TraceID
加分:
- 用 protobuf 定义消息,自动生成代码
- 集成 Jaeger,全链路追踪
代码量:≈ 2 k 行
阶段 5:网关 + 微服务拆分(10 天)
项目:go-game-micro
目标:学会
- gRPC、服务发现、负载均衡、消息队列、分布式锁
架构:
- 网关(TCP/WS 接入层,无状态,可水平扩)
- 逻辑服(房间、玩法)
- 账号服(阶段 2)
- 排行榜服(基于 Redis Sorted Set)
MVP:
- 玩家从网关进来,网关通过 gRPC 调用逻辑服
- 逻辑服崩溃后网关能自动重连并迁移玩家
- 排行榜每日 0 点结算,发奖邮件(用 NSQ 异步)
加分:
- 基于 Kubernetes + Helm 一键部署
- 用 GitHub Actions 跑 CI,自动跑单测、docker build、push
代码量:≈ 4 k 行
阶段 6:压测 + 优化(3 天)
项目:go-bench-tool
目标:学会
- pprof、benchmark、内存池、对象池、消息编码优化
做法:
- 用 golang.org/x/time/rate 做限流
- 把阶段 4 的出牌逻辑用 sync.Pool 优化,对象复用
- 写压测脚本(go-wrk),单核 1 k 并发保持 99% 延迟 < 20 ms
输出:
- 一份 PDF 压测报告,附火焰图,可放进简历“性能优化”章节
阶段 7:整合成品(2 天)
把阶段 3~6 拼成一个可对外演示的“斗地主微服务套件”,README 画一张架构图,GitHub 开源。
至此,你拥有:
1. 一个完整可运行的游戏后端项目(开源链接)
2. 覆盖账号、网关、逻辑、排行榜、排行榜、WebSocket、TCP、gRPC、Redis、MySQL、NSQ、K8s、Prometheus、Jaeger、压测报告
3. 代码总量 ≈ 1 万行,足够应对校招 / 初级社招面试