并发编程
Targo 的并发模型来自 Go,而不是 JavaScript 的 async runtime。
核心心智模型
go(() => { ... })启动 goroutinechan<T>用于通信select风格协调通过switch (chan.$select)完成
如果你习惯的是 Promise / async/await,最需要改变的是思考方式,而不是 API 名称。
迁移理解
JS 异步思维
你可能会先想:
- 这个函数返回什么 Promise?
- 我在哪里
await? - 错误是 reject 还是 throw?
Targo 并发思维
你应该先想:
- 这里真的需要并发吗?
- 谁负责启动 goroutine?
- 数据通过哪个 channel 流动?
- 错误如何显式传播?
- 谁关闭 channel?
实践建议
不要把 goroutine 当成 Promise 包装器
只有在并发确实带来价值时再启 goroutine。
否则同步的 Go 风格 API 往往更清晰。
先设计 channel 语义
在写代码前先确定:
- channel 传的是什么值
- 是否需要错误通道
- 谁发送
- 谁接收
- 谁关闭
select 是协调工具,不是语法炫技
只在真的需要等待多个通信事件时才用 select 风格代码。
常见误区
- 试图把
Promise.all、race、await一比一翻译 - 只设计成功值,不设计失败路径
- 不明确 channel 生命周期和关闭责任