枫溪的技术分享

学习GO语言的计划

2025/11/17
1
0

阶段 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 万行,足够应对校招 / 初级社招面试