3 ms·
> 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
by acatton 1y 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 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/ 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 1y agoI 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 1y 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.
- lagniappe 1y 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 1y agoI do believe it’s backwards compatibility and evolving APIs
- CamouflagedKiwi 1y agoExcept that it's a little bit too convenient, and highly useful things like errgroup stay there instead of having been adopted into the stdlib.
- mholt 1y agoThe extended standard lib is pretty great, but definitely can't keep the Go compatibility promise, so it's good that it's separate.
- h4ck_th3_pl4n3t 1y agoI 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.
- infogulch 1y agoWow how did I not know of this?! How does it cancel in-progress goroutines when the provided context is cancelled?
- WhyNotHugo 11mo agoLooks like this isn’t usable with functions that take parameters. For that, you need wg.Add.