Earlier quoted context omitted.
The main difference is that reading from channels will block if its empty where Futures, return the same value. Written more concisely. f := New(func() Type{return t}) v := g.Get() w := g.Get()
I wish Go had macros a'la Rust, it would be possible to write the whole thing in so much nicer way.
Programmer write cost <<<<<<<<< read cost