acatton
11 hours ago
> The wg.Go Function
> Go 1.25 introduced a waitgroup.Go function that lets you add Go routines to a waitgroup more easily. It takes the place of using the go keyword, [...]
99% of the time, you don't want to use sync.WaitGroup, but rather errgroup.Group. This is basically sync.WaitGroup with error handling. It also has optional context/cancellation support. See https://pkg.go.dev/golang.org/x/sync/errgroup
I know it's not part of the standard library, but it's part of the http://golang.org/x/ packages. TBH, golang.org/x/ is stuff that should be in the standard library but isn't, for some reason.
blixt
10 hours ago
I thought exactly the same thing. I use errgroup in practically every Go project because it does something you'd most likely do by hand otherwise, and it does it cleaner.
I discovered it after I had already written my own utility to do exactly the same thing, and the code was almost line for line the same, which was pretty funny. But it was a great opportunity to delete some code from the repo without having to refactor anything!
giancarlostoro
6 hours ago
> and the code was almost line for line the same, which was pretty funny.
One of the core strengths of Go is that it fits the zen of Python's " There should be one-- and preferably only one --obvious way to do it" and it does this very nicely.
mholt
9 hours ago
The extended standard lib is pretty great, but definitely can't keep the Go compatibility promise, so it's good that it's separate.
lagniappe
10 hours ago
>golang.org/x/ is stuff that should be in the standard library but isn't, for some reason
think of it as testing/staging before being merged into stable stdlib
linhns
6 hours ago
I do believe it’s backwards compatibility and evolving APIs
CamouflagedKiwi
5 hours ago
Except that it's a little bit too convenient, and highly useful things like errgroup stay there instead of having been adopted into the stdlib.
infogulch
6 hours ago
Wow how did I not know of this?!
How does it cancel in-progress goroutines when the provided context is cancelled?
h4ck_th3_pl4n3t
7 hours ago
I never used errgroup but I realize that it's essentially the same what I end up implementing anyways.
With standard waitgroups I always move my states as a struct with something like a nested *data struct and an err property which is then pushed through the channel. But this way, my error handling is after the read instead of right at the Wait() call.