Sobes.tech
Junior — Middle

¿De qué manera se realiza el control y la coordinación del trabajo de las goroutines en Go?

sobes.tech AI

Respuesta de la IA

En Go, el control y la coordinación de las goroutines se realiza de varias maneras:

  • Canales (channels) — mecanismo principal para intercambiar datos y sincronizar entre goroutines. Los canales permiten transmitir valores de forma segura y bloquean al emisor o receptor hasta que estén listos.

  • sync.WaitGroup — se usa para esperar a que un grupo de goroutines termine. Permite que la goroutine principal espere hasta que todas las goroutines lanzadas finalicen.

  • Context (context.Context) — se emplea para gestionar el tiempo de vida de las goroutines, transmitir señales de cancelación y establecer límites de tiempo.

  • Mutexes y otros primitivas del paquete sync — para proteger recursos compartidos y prevenir condiciones de carrera.

Ejemplo con WaitGroup y canal:

var wg sync.WaitGroup
ch := make(chan int)

wg.Add(1)
go func() {
    defer wg.Done()
    ch <- 42 // enviando valor
}()

go func() {
    val := <-ch // recibiendo valor
    fmt.Println(val)
}()

wg.Wait() // esperando a que termine

De esta forma, la combinación de canales y primitivas de sincronización permite gestionar eficazmente la ejecución paralela de las goroutines.