Sending data through channels just to implement an iterator seems insane. It's not strictly lazy either...
Why do go developers reject simple patterns that make faster code?
Look, I’ve written lots of scala and erlang so I get your argument. It just does not exist in go. And that’s okay.
Never got caught thinking “gee, need a lazy collection”. Maybe a stream when reading stuff from the ether. In go, channel was enough. 5 minute job. Nothing insane.
for over a channel is in essence lazy. Channel stores the data as a linked list. So what’s the benefit.
Lazy evaluation is the only reasonable way to implement iterators so you don't have to pay the costs of intermediate data structures or sending data over channels. Insertion into a data structure isn't free. Function composition is.