Repolode
sourcegraph

sourcegraph/conc

一个让 Go 结构化并发更安全、更易读的库,提供带 panic 处理的 WaitGroup、限流协程池和有序流处理。

Star
10,435
Fork
366
未关闭 Issue
33
最近提交
2个月前

这是什么?

conc 是一个 Go 并发工具包,把常见的并发模式封装成有明确作用域、更易读的 API。每个协程都归属于一个 conc.WaitGroup,由调用方负责等待其结束,避免协程无人管理地在后台运行。

子协程中发生的 panic 会被捕获,并在调用 Wait() 的协程中重新抛出,同时附带子协程的堆栈信息。这省去了普通 go 语句中手写 recover 和错误转发的样板代码。

在 WaitGroup 之上,conc 还提供限制并发数的协程池、可收集结果或错误的池、支持上下文取消的池、保持顺序的流处理器,以及对切片的并发 Map 和 ForEach 操作。

核心功能

  • 01WaitGroup 管理其派生的协程,并等待它们全部结束。
  • 02子协程的 panic 会在 Wait() 时重新抛出,并保留子协程的堆栈。
  • 03通过 WithMaxGoroutines 限制协程池的最大并发数。
  • 04支持收集结果或错误的协程池,并可在首个错误时取消上下文。
  • 05并行执行任务、按原顺序串行回调的有序流处理。
  • 06对切片进行并发的 iter.Map 和 iter.ForEach。

适用场景

  • 在服务中替代 sync.WaitGroup,确保子协程的 panic 能被正确传递而不是静默崩溃。
  • 让一组任务的并发协程数量保持在固定上限之内。
  • 无需手写 worker 循环,就能并发地对切片做映射或遍历。
  • 并行处理有序数据流,同时保证输出顺序不变。

快速上手

  1. 1

    将该库添加到你的 Go 模块中

    go get github.com/sourcegraph/conc

使用前须知

  • README 称该库仍处于 1.0 之前的阶段,在正式 1.0 发布前可能出现小的破坏性变更。

标签

常见问题

conc 是什么?
一个让 Go 结构化并发更安全、更易读的库,提供带 panic 处理的 WaitGroup、限流协程池和有序流处理。 conc 是一个 Go 并发工具包,把常见的并发模式封装成有明确作用域、更易读的 API。每个协程都归属于一个 conc.WaitGroup,由调用方负责等待其结束,避免协程无人管理地在后台运行。
conc 可以免费使用吗?用的什么许可证?
conc 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
conc 还在维护吗?
半年内有更新。conc 最近一次提交是在 2026年9月1日。
conc 适合用来做什么?
在服务中替代 sync.WaitGroup,确保子协程的 panic 能被正确传递而不是静默崩溃。 让一组任务的并发协程数量保持在固定上限之内。 无需手写 worker 循环,就能并发地对切片做映射或遍历。 并行处理有序数据流,同时保证输出顺序不变。
conc 怎么安装和运行?
将该库添加到你的 Go 模块中: go get github.com/sourcegraph/conc
在哪里获取 conc?
源代码和安装说明在 GitHub 上:https://github.com/sourcegraph/conc

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目