<story><title>Conc: Better Structured Concurrency for Go</title><url>https://github.com/sourcegraph/conc</url></story><parent_chain></parent_chain><comment><author>kevmo314</author><text>The WaitGroup looks suspiciously like errgroup, which even has the .WithMaxGoroutines() functionality: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;pkg.go.dev&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;sync&amp;#x2F;errgroup&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;pkg.go.dev&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;sync&amp;#x2F;errgroup&lt;/a&gt;&lt;p&gt;&amp;gt; A frequent problem with goroutines in long-running applications is handling panics. A goroutine spawned without a panic handler will crash the whole process on panic. This is usually undesirable.&lt;p&gt;In go land, this seems desirable. Recoverable errors should be propagated as return values, not as panics.</text></comment>
<story><title>Conc: Better Structured Concurrency for Go</title><url>https://github.com/sourcegraph/conc</url></story><parent_chain></parent_chain><comment><author>camdencheek</author><text>Hi! Author here. Conc is the result of generalizing and cleaning up an internal package I wrote for use within Sourcegraph. Basically, I got tired of rewriting code that handled panics, limited concurrency, and ensured goroutine cleanup. Happy to answer questions or address comments.</text></comment>