You probably should have a try at golang concurency management with channels, and you'll see what i mean.
GCD isn't much more than a low level job launching and scheduling library. It doesn't provide advanced patterns for resource sharing.
Concurrency goes further than parallelism, it's also a way to manage concurrent memory access (although golang does let you shoot yourself in the foot if you want to with low level mutexes as well). There's a great talk from rob pike on the subject http://blog.golang.org/concurrency-is-not-parallelism