1. In your main routine you build a channel of ints (noticed they're typed) named `x`
2. You hand `x` and an integer i (incremented by one for each new routine) to ten routines which will double that number and send the result down `x`
3. Your main routine then receives on `x` and builds a list of results. It hasn't blocked on the doubling operations for each integer `i` because you sent each of those operations in a new routine.
Ignoring the fact I haven't managed closing the channel `x` you can get the gist of how channels are named and passed around.
I can't say what the alternative would be in Rust, but I hope that sheds more light on Go!