The previous chapter discussed systems programming in Go, including the Go functions and techniques that allow you to communicate with your operating system. Two of the areas of systems programming that were not covered in the previous chapter are concurrent programming and how to create and manage multiple threads. Both of these topics will be addressed in this chapter and the next one.
Go offers its own unique and innovative way of achieving concurrency, which comes in the form of goroutines and channels. Goroutines are the smallest Go entities that can be executed on their own in a Go program. Channels can get data from goroutines in a concurrent and efficient way. This allows goroutines to have a point of reference and they can communicate with each other. Everything in Go is executed using goroutines, which makes...