Les goroutines sont plus légères que les threads (en termes de mémoire et de coût de changement de contexte).
La gestion des goroutines est plus simple grâce à des constructions de haut niveau, comme les canaux.
Cependant, contrairement aux threads, les goroutines partagent la même adresse mémoire, ce qui peut conduire à des problèmes de concurrence si elles ne sont pas correctement synchronisées.
Les goroutines sont souvent utilisées avec des canaux, qui permettent une communication sûre entre les goroutines.
select permet de gérer plusieurs canaux simultanément.
Les patterns de concurrence, comme le pattern "worker", peuvent être facilement implémentés en Go grâce aux goroutines et aux canaux.
Le package sync fournit des primitives de bas niveau pour la synchronisation, comme Mutex pour la mutuelle exclusion, permettant de protéger les sections critiques du code.