阶段 01 · 基础语法读源码之前,先观察
从熟悉的 Java,走进 Go。
变量、函数、结构体和接口。用七个可独立运行的脚本,建立 Go 的第一层直觉。
从 Java 经验出发
这一步练到什么程度
动手改变,观察结果
浏览器教学模拟 · 不执行 Go本课实验
goroutine A
发送者
准备发送 1
就绪ch := make(chan int, 2)0 / 2 已使用
goroutine B
接收者
尚未接收
就绪为什么这和 Java 的队列不完全一样?
有缓冲 Channel 可以类比有界 BlockingQueue,但容量为 0 时,发送与接收必须配对;它更接近一次交接。Channel 也有关闭语义:缓冲读完后返回零值与 ok=false。这个实验每侧只模拟一个 goroutine,一侧阻塞后不能继续执行下一次操作。
对照 03_channel/main.go ↗请求入口
客户端
POST /chat/completionsChain.Stream
Go 代理
校验 · 转发 · Flush上游 A
首选上游 B
备用0 / 0
客户端收到的内容
等待请求…
尚未发送事件轨迹
- 点击“播放过程”开始。
动画与本仓库的实现有什么对应关系?
这里演示流式路径:A 返回可切换的错误(例如 503)时直接尝试 B,不在 A 上重试。400 是不可重试错误。进入流读取后产生的读错误会原样返回,不再 fallback;客户端取消会结束请求。非流式路径才会按 ATTEMPTS 在同一上游重试。本动画的“断流”特指读取返回错误,并不等同于所有提前 EOF 场景。
对照 provider/chain.go ↗从仓库根目录运行