Skip to content

并发编程

Targo 的并发模型来自 Go,而不是 JavaScript 的 async runtime。

核心心智模型

  • go(() => { ... }) 启动 goroutine
  • chan<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.allraceawait 一比一翻译
  • 只设计成功值,不设计失败路径
  • 不明确 channel 生命周期和关闭责任

对应 Reference