Canales en Go
Los canales son la característica que Go nos facilita para comunicar entre sí goroutines y poder sincronizar su ejecución.
var c chan string = make(chan string)
El tipo canal se representa con la palabra chan y, a continuación, el tipo de los datos que viajaran a través de dicho canal. En el ejemplo de arriba he declarado la variable c, que contendrá un canal para transferir datos de tipo string. En la misma línea de código he usado make para crear dicho canal que, como puedes observar, se asigna a la variable c.
Para enviar o recibir datos por el canal has de usar el signo <- justo delante o detrás del canal de la manera que sigue.
c <- "Enviando por el canal"
var mensaje := <- c
Esta operación es síncrona, por tanto, el emisor esperará hasta que el receptor está preparado para recibir el envio. Si usas un canal con buffer, la operación será asíncrona, y por tanto, éste bloqueo sólo tendrá lugar cuando el buffer esté lleno.
c := make(chan int, 1)