@Adám channels are a kind of data structure in Go. They work kinda like infinite lists, but are mainly used for concurrency. So channel <- value adds value to channel, and likewise value <- channel assigns the first element of channel to value.
The interesting bit about channels is this: "By default, sends and receives block until the other side is ready. This allows goroutines to synchronize without explicit locks or condition variables."
So if you have two routines adding something to a channel, the result of the first routine will be added to the channel first regardless of which one finishes first.