Translate

domingo, 6 de octubre de 2019

Channels en Go

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