http://tleyden.github.io/blog/2013/11/23/understanding-chan-chans-in-go/