Go con Ejemplos: Canales

Los Canales son las tuberías que conectan goroutines concurrentes. Puedes enviar valores por un canal de una goroutine y recibir esos valores en otra goroutine.

package main
import "fmt"
func main() {

Puedes crear un canal nuevo con make(chan val-type). Los canales son del tipo de datos de los valores que transportan.

    mensajes := make(chan string)

Envía un valor por un canal usando la sintaxis canal <-. Aquí estamos enviando "ping" al canal de mensajes que creamos arriba, de otra nueva goroutine.

    go func() { mensajes <- "ping" }()

La sintaxis <-canal recibe un valor del canal especificado. Aquí recibimos el mensaje "ping" que envíamos arriba y lo mostramos en pantalla.

    msg := <-mensajes
    fmt.Println(msg)
}

Cuando corremos el programa el mensaje "ping" se pasa de una goroutine a otra a través de nuestro canal.

$ go run channels.go
ping

Por defecto la recepción y los envíos se bloquean hasta que ambos receptor y transmisor están listos. Esta propiedad nos permite esperar hasta el mensaje "ping" hasta el final del programa sin tener que usar ningún otro tipo de sincronización.

Siguiente ejemplo: Buffering de Canales.