带路线图、练习题和实战项目的 Go 后端学习仓库。目标不是"看懂",而是吃透并能徒手写出来——每个模块都按「跑 → 练 → 对答案 → 重写」的循环使用。
在线体验:Java → Go 交互学习实验室
用网页先观察,再回到源码练习:九阶段课程各有对应实验,覆盖函数、API 分层、JWT、gRPC、微服务、Channel、限流、错误链和 SSE;支持场景切换与当前浏览器的学习进度。
# 从仓库根目录启动,无需安装前端依赖
python3 -m http.server 4174 --bind 127.0.0.1 --directory web打开 http://127.0.0.1:4174/。动画是浏览器教学模拟,不执行 Go,也不调用真实模型。课程与练习链接指向本仓库 GitHub 源码。部署方法与验证命令见 web/README.md。
- 跑:进入模块目录
go run ./xx_demo,对照输出理解每一行在干什么 - 练:打开
EXERCISES.md,遮住源码做题(预测输出 / 改代码 / 徒手实现 / 找 bug) - 对答案:做完再看
SOLUTIONS.md,答错的题回到源码找原因 - 重写:最高标准——不看源码,把 demo 的核心逻辑自己写一遍
学习路线的"为什么"、技术选型观点和阶段复盘记录在 JOURNEY.md(按日期追加的成长轨迹)。
| 阶段 | 目录 | 内容 | 练习 |
|---|---|---|---|
| 01 | 01-quickstart | 基础语法 7 讲(变量/函数/结构体/接口/并发/集合) | — |
| 02 | 02-user-api | Gin + GORM 入门:CRUD、分层架构、PostgreSQL | — |
| 03 | 03-user-api-advanced | 进阶:JWT 认证、中间件、viper 配置、Service 层单测、Docker 部署 | — |
| 04 | 04-grpc-demo | gRPC 基础:proto、四种模式、拦截器、错误处理 | — |
| 05 | 05-grpc-microservice | gRPC 微服务:多服务互通、服务间调用 | — |
| 06 | 06-concurrency | 并发十讲:goroutine/泄漏/channel/select/锁/atomic/sync/Context | EXERCISES |
| 07 | 07-backend-patterns | 后端三大件:分布式锁、限流、缓存穿透/击穿/雪崩 | EXERCISES |
| 08 | 08-engineering | 工程化:错误处理、cmd/internal 布局、slog、泛型、table-driven 测试 | 各课 README 尾部 |
| 09 | 09-streaming-proxy | 结业实战:迷你 LLM 网关——SSE 流式转发、超时/重试/fallback | 各课 README 尾部 |
| 目录 | 内容 |
|---|---|
| interview-prep/data-structures | 链表/栈/队列/树/图/排序/查找 |
| interview-prep/operating-system | 进程调度/内存管理/页面置换/死锁/同步 |
| interview-prep/computer-network | TCP/UDP/HTTP/DNS/协议栈 |
这两个模块对应真实工作里最常用、但前七个模块没覆盖的能力:
- 08-engineering:真实 Go 项目(如本工作区的 litellm-gateway、pi-go)都是
cmd/+internal/布局、接口拆分、依赖注入、测试文件占三分之一。这一模块把这些工程习惯单独练一遍,其中02-project-layout是一个完整的 stdlibnet/httptodo 服务。 - 09-streaming-proxy:LLM 网关的日常 = SSE 流式转发 +
http.Client超时/重试/fallback。这个模块做一个能跑的迷你网关(带 mock 上游,离线可玩),做完回头看 litellm-gateway 的源码会顺畅很多。
- 01 基础语法:7 个脚本全部跑过,能说出和 Java 的核心差异
- 02 user-api:CRUD 跑通,理解 Controller/Service/Repository 分层
- 03 user-api-advanced:JWT 流程能徒手画出来;
go test ./...通过;Docker 跑通 - 04 gRPC:四种通信模式各跑一遍,能说清楚和 REST 的取舍
- 05 微服务:两个服务互相调用跑通
- 06 并发:EXERCISES.md 全部做完(含 3 道徒手实现题)
- 07 后端模式:EXERCISES.md 全部做完;缓存三连问题 + 方案能脱稿讲
- 08 工程化:4 课练完;todoapp 的测试全部看懂,
Complete的错误链能徒手写 - 09 结业:不看源码实现"fallback + SSE 转发"的核心逻辑;mock 双上游演示跑通
- 结业自查:随机挑一个 demo,遮住源码重写,编译运行通过
# 单模块运行(每个目录都是独立 Go module)
cd 06-concurrency && go run ./01_goroutine
cd 09-streaming-proxy && UPSTREAMS="A=http://localhost:9090/v1,B=http://localhost:9091/v1" go run ./cmd/proxy
# 单模块测试
cd 08-engineering/02-project-layout && go test ./... -v
# 结业实战三终端演示(SSE 流式 + fallback)
# 每个终端先从仓库根目录执行:cd 09-streaming-proxy
go run ./cmd/mock-upstream --addr :9090 --label 上游A # 终端1
go run ./cmd/mock-upstream --addr :9091 --label 上游B # 终端2
UPSTREAMS="A=http://localhost:9090/v1,B=http://localhost:9091/v1" go run ./cmd/proxy # 终端3
curl -N -X POST localhost:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"demo","messages":[{"role":"user","content":"你好"}],"stream":true}'
# 杀掉 9090 再请求 → 自动 fallback 到上游B.trae/specs/ 是 2026-06 学习期间的规划存档,只作历史参考,不再维护;当前路线以本 README 为准。