Goroutines
Una goroutine es una función ligera que se ejecuta de forma independiente, iniciada poniendo go delante de una llamada a función. Las goroutines son baratas — un programa Go puede ejecutar miles a la vez — y son una parte central del propio lenguaje, no una librería añadida.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
results := make([]int, 3)
for i := 0; i < 3; i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
results[index] = index * index
}(i)
}
wg.Wait()
fmt.Println(results)
}[0 1 4]
sync.WaitGroup es cómo main espera a que un grupo de goroutines termine antes de continuar — wg.Add(1) registra una goroutine para esperar, y cada goroutine llama a wg.Done() cuando termina; wg.Wait() bloquea hasta que cada goroutine registrada haya avisado.
Siguiente: channels — cómo se comunican las goroutines entre sí de forma segura.
Practice exercise
Usa un sync.WaitGroup para ejecutar una goroutine que establezca una variable result := 0 en 100, esperando que termine antes de imprimir result.