Ne partagez pas la mémoire, partagez les données
Les Channels sont les tuyaux qui connectent les Goroutines concurrentes. Vous envoyez des valeurs dans les channels depuis une Goroutine et recevez ces valeurs dans une autre.
go ch := make(chan string)
go func() { ch <- "message" // Envoi }()
msg := <-ch // Réception (bloque jusqu'à l'arrivée du message)
Les Channels préviennent les race conditions par conception car la propriété des données est transmise entre les routines.