AnyCompiler

Goroutines

Uma goroutine é uma function leve que roda de forma independente, iniciada colocando go na frente de uma chamada de function. Goroutines são baratas — um programa Go pode rodar milhares delas ao mesmo tempo — e elas são parte central da própria linguagem, não uma biblioteca adicionada.

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 é como main espera um grupo de goroutines terminar antes de continuar — wg.Add(1) registra uma goroutine para esperar, e cada goroutine chama wg.Done() quando termina; wg.Wait() bloqueia até que toda goroutine registrada tenha avisado.

A seguir: channels — como goroutines se comunicam entre si com segurança.

Practice exercise

Use um sync.WaitGroup para rodar uma goroutine que define uma variável result := 0 para 100, esperando ela terminar antes de imprimir result.