## 现象 PipeFlow/ParallelFlow/AsyncFlow/SwitchFlow 各自重复同一组字段与方法(复核确认四个类型的 Add/Hooks/SetHookManager/snapshot 方法形态一致): - pipe.go:17-103、parallel.go:19-140、async.go:26-84、switch.go:20-117 ```go mu sync.Mutex; runnables ...; hookManager *HookManager func (p *PipeFlow) Add(...) { p.mu.Lock(); defer p.mu.Unlock(); p.runnables = append(...); for ... setHookManagerByRunnable } ``` Add/Hooks/SetHookManager/snapshot 四个方法在 4 个类型中语义逐字相同(SwitchFlow 的 runnables 是 map),Run 也都是 `_, hm := s.snapshot(); return s.runWithHooks(ctx, hm)`(pipe.go:68、parallel.go:80、async.go:93、switch.go:73)。 ## 建议方案 抽 `type flowBase struct { mu sync.Mutex; runnables []Runnable; hookManager *HookManager }`,内嵌到三个切片型 Flow,Add/Hooks/SetHookManager/snapshot 一次实现(方法集自动提升,公开 API 形状不变);SwitchFlow 保留 map 差异,只内嵌 hookManager + mu 部分或复用 setHookManagerByRunnable 传播循环。 ## 备注 - 行号基于 2026-11-11 的 main
Activity
Merge pull request #100 from oekit/fix/sweep-20261112
zy84338719 commentedon Nov 11, 2026
已在
v0.11.0修复并发布 ✅变更内容
本条修复(在
v0.11.0的版本节里定位到):该版本 `v0.11.0` 的其余变更
关联问题单:workflow#94、workflow#96、workflow#97、workflow#98、workflow#99。
Release: https://github.com/oekit/workflow/releases/tag/v0.11.0