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.