Continuamos con en go
Los channels o canales son las tuberías que conectan las goroutinas concurrentes. Puede enviar valores a canales desde una goroutine y recibir esos valores en otra goroutine.
Se puede crear un nuevo channel con make (chan val-type). Los channels o canales están tipificados por los valores que transmiten.
Veamos un ejemplo:
package main
import "fmt"
func main() {
messages := make(chan string)
go func() { messages <- "ping" }()
msg := <-messages
fmt.Println(msg)
}
$ go run channels.go
ping
Como se puede ver en el ejemplo, se crea un chanel y luego envía valor a este chanel utilizando la sintaxis <-. En el ejemplo enviamos "ping" al canal messages que hicimos arriba, desde una nueva rutina.
La sintaxis <- permite recibir un valor del canal. Aquí recibiremos el mensaje de "ping" que enviamos arriba y lo imprimimos.
Cuando ejecutamos el programa, el mensaje "ping" se pasa con éxito de una rutina a otra a través de nuestro canal.
Por defecto se envían y reciben datos hasta que el emisor como el receptor estén listos. Esta propiedad nos permite esperar al final de nuestro programa el mensaje "ping" sin tener que usar ninguna otra sincronización.
Dejo link: https://gobyexample.com/channels