g, ctx := errgroup.WithContext(ctx) создаёт группу горутин с общим контекстом: при первой возвращённой ошибке контекст отменяется и остальные горутины получают отмену. g.Go(f) запускает горутины, g.Wait() ждёт и возвращает первую ошибку. Удобно для параллельных операций с отменой.
g, ctx := errgroup.WithContext(context.Background())
g.Go(func() error { return fetch(ctx, url1) })
g.Go(func() error { return fetch(ctx, url2) })
if err := g.Wait(); err != nil { return err }