Sobes.tech
Junior — Middle

¿Cómo organizar la interacción y la transferencia de datos a través de canales en el sistema?

sobes.tech AI

Respuesta de la IA

En Go, la interacción entre goroutines a menudo se organiza a través de canales (channels), que son tuberías tipadas para la transmisión de datos.

Para enviar datos, se crea un canal con make(chan Tipo). Las goroutines pueden enviar datos al canal usando el operador <-, y también recibir datos del canal con el mismo operador, lo que garantiza la sincronización.

Ejemplo:

package main

import (
    "fmt"
    "time"
)

func productor(ch chan<- int) {
    for i := 0; i < 5; i++ {
        ch <- i // envío de datos
        time.Sleep(time.Millisecond * 500)
    }
    close(ch) // cerramos el canal para indicar que ha terminado
}

func consumidor(ch <-chan int) {
    for val := range ch { // recepción de datos del canal
        fmt.Println("Recibido:", val)
    }
}

func main() {
    ch := make(chan int)
    go productor(ch)
    consumidor(ch)
}

De esta forma, los canales permiten transmitir datos entre goroutines de manera segura y eficiente, evitando condiciones de carrera y bloqueos.