Sobes.tech
Junior — Middle

Como gerir o estado e o encerramento de uma goroutine em Go?

sobes.tech IA

Resposta da IA

Em Go, a gestão do estado e a finalização das goroutines geralmente é feita usando canais (channels) e contextos (context).

  1. Canais permitem transmitir sinais entre goroutines. Por exemplo, pode criar um canal para notificar a necessidade de terminar:
stop := make(chan struct{})
func() {
    for {
        select {
        case <-stop:
            return // Termina a goroutine
        default:
            // Executa trabalho
        }
    }
}()

// Para parar a goroutine:
close(stop)
  1. Pacote context fornece uma forma conveniente de gerir o tempo de vida das goroutines, especialmente ao trabalhar com pedidos ou operações longas:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            return // Termina a goroutine
        default:
            // Trabalho
        }
    }
}(ctx)

// Para parar:
cancel()

Desta forma, as goroutines escutam sinais através de canais ou contextos e terminam corretamente ao receber o sinal.