Go Concurrency Explained: Goroutines, Channels & Patterns