Volver a la página principal
lunes 21 octubre 2024
5

Cómo usar Channels en Go

Los channels en Go permiten la comunicación entre goroutines, facilitando el intercambio de datos de manera segura y sincronizada. Son una herramienta clave para la concurrencia, ya que permiten que varias goroutines trabajen juntas coordinadamente al enviar y recibir información a través de un canal.

¿Qué son los channels en Go?

Un channel en Go es un mecanismo que permite que una goroutine envíe valores a otra goroutine de forma concurrente. Los channels garantizan la sincronización automática, lo que significa que una goroutine se bloqueará hasta que otra esté lista para recibir o enviar datos. Se declaran con el tipo de datos que transportarán.

Ejemplo básico de uso

Aquí te muestro cómo funcionan los channels en Go:

package main

import "fmt"

// Función que envía datos a través de un channel
func enviar(c chan int) {
    c <- 5 // Envía el valor 5 al canal
}

func main() {
    c := make(chan int) // Crear un channel de tipo int

    go enviar(c) // Iniciar una goroutine para enviar datos

    valor := <-c // Recibir el valor del channel
    fmt.Println(valor) // Imprimir el valor recibido (5)
}

En este ejemplo, la goroutine enviar envía el valor 5 al canal, que es recibido e impreso por la goroutine principal.

Tipos de channels en Go

1. Unbuffered channels: Requieren que tanto el envío como la recepción ocurran simultáneamente.

c := make(chan int) // Un canal sin buffer

2. Buffered channels: Permiten almacenar valores en cola, hasta que el buffer se llena.

c := make(chan int, 3) // Un canal con buffer para 3 enteros

Algunos ejemplos

Canal sin buffer

package main

import "fmt"

func main() {
    c := make(chan int)

    go func() {
        c <- 10
    }()

    fmt.Println(<-c) // Imprime 10
}

Canal con buffer

package main

import "fmt"

func main() {
    c := make(chan int, 2)
    
    c <- 1
    c <- 2
    
    fmt.Println(<-c) // Imprime 1
    fmt.Println(<-c) // Imprime 2
}

Referencia oficial

Para más detalles, puedes consultar la documentación oficial de Go sobre channels.

Etiquetas:
go
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer