跳到主要内容
Jason Rong
前端糕手
查看所有作者

Go Worker Pool 的两种思路实现

· 阅读需 8 分钟
Jason Rong
前端糕手

写带结果收集的 worker pool,任务分发通常不难。真正容易写岔的是怎么停

停之前先把这两个问题答死,后面实现几乎是顺水推舟:

  1. 已经进队、还没被 worker 拿走的任务,还要不要做?
  2. 已经做完、结果还没发出去的任务,结果能不能丢?

对这两个问题的回答不同,中断机制和 API 形态就会分叉。下面按这两种答案,分别看实现。

Go 的引用语义:指针、传参与那些天生的引用类型

· 阅读需 6 分钟
Jason Rong
前端糕手

从 JavaScript / TypeScript 转过来学 Go 时,最容易困惑的一点是:Go 到底是"值传递"还是"引用传递"?答案是——Go 只有值传递,没有引用传递。但偏偏 slicemapchannel 这些类型用起来又像"引用"。这篇随记就来理清这层看似矛盾的关系:什么是引用语义、如何用指针显式取引用,以及为什么 channelfunccontext 这些类型天生就不需要你再套一层指针。

useSyncExternalStore

· 阅读需 3 分钟
Jason Rong
前端糕手

在复杂模块里,把计算与状态放在 React 外的 store,再订阅到组件——useSyncExternalStore 的用法笔记。

模式匹配:更具阅读性的条件分支

· 阅读需 6 分钟
Jason Rong
前端糕手

面临多分支判断,如果面对结构数据只能 if,else。switch 无法很好地解决。同时,大量的 if,else 判断会让其条件判断分支没有那么直观,尤其是复杂数据中多个属性进行层级、通配符判断。本文提出基于函数链式判断进行条件分支管理。