> But there are some disadvantages to this way of doing it. First, we have to wait until the whole slice has been generated before we can start to process the first element of it.
Uh, range over channel ? The author seems to be very bad at go
func Items() (items chan Item)
will return channel that then can be just for a := range Items() {}