The 'for...range' construct reads from the given channel until the channel is closed. Obviously, another goroutine must be writing to the channel and must close the channel when it is done writing. This goroutine is called a generator in the general case and specifically an "iterator" when it produces elements of a container. Iterating over a container looks like: