AnyCompiler

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)
}
Output
[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.