Comment

Comment by diegoholiveira

The post advocates for structured concurrency, but it compares a language primitive with a library abstraction. In Go, implementing the same basic nursery concept is straightforward with `golang.org/x/sync/errgroup`:

  g, ctx := errgroup.WithContext(ctx)

  g.Go(func() error {
    return task1(ctx)
  })

  g.Go(func() error {
    return task2(ctx)
  })

  return g.Wait()
If you don't care about error propagation or cancellation at all, the standard library also provides `sync.WaitGroup`.

The author also seems to argue that structured concurrency is always preferable, but I do not think that is true. There are valid use cases for unstructured concurrency, particularly for long-lived or independently managed tasks.

No comments yet

Be the first to share your thoughts.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton