Goroutines have built-in primitives to communicate safely between themselves (channels) They are multiplexed onto a small number of OS threads, rather than a 1:1 mapping. They are Green threads, which means the Go runtime does the scheduling, not the OS. Go handles all of the synchronization for you, and its much harder to run into things like deadlocks. The mantra is dont communicate by sharing memory, share memory by communicating.”]
Source: http://tleyden.github.io/blog/2014/10/30/goroutines-vs-threads/

