Go Concurrency Patterns in 2026: What Go 1.25 Let Me Delete
Go 1.25 added WaitGroup.Go and a stable testing/synctest. Here are the Go concurrency patterns I actually use in 2026, and the boilerplate I deleted.
Go 1.25 added WaitGroup.Go and a stable testing/synctest. Here are the Go concurrency patterns I actually use in 2026, and the boilerplate I deleted.
I've shipped production services in both Rust and Go. Here's the decision framework I actually use, with code, honest trade-offs, and no benchmark wars.
Four years into Go generics, here is what I actually reach for in production, the constraints I write, and the patterns I quietly stopped using.
The Go error patterns I actually use in production: fmt.Errorf %w wrapping, sentinel vs typed errors, errors.Is vs errors.As, and errgroup at scale.
Four years with testify, then I migrated off it. What I kept (assert and require), what I dropped (mock and suite), and the plain-Go alternatives…
I ignored Go 1.23 iterators for almost a year. Here's what finally made me reach for them, where they're worth it, and the footgun that…
Go error handling doesn't have to be painful. Practical patterns for error wrapping, sentinel errors, and custom types that cut the if-err-nil noise.