Sobes.tech
Junior — Middle

Como parar corretamente a execução de goroutines usando o contexto em Go?

sobes.tech IA

Resposta da IA

Para parar corretamente as goroutines em Go, muitas vezes usa-se o pacote context. Cria-se um contexto com a capacidade de cancelamento (context.WithCancel), que é passado para a goroutine. Dentro da goroutine, o estado do contexto é verificado periodicamente através de <-ctx.Done(). Quando a função de cancelamento é chamada, o canal Done() é fechado, e a goroutine pode terminar corretamente.

Exemplo:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine parada")
            return
        default:
            // realizar trabalho
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // após algum tempo, parar a goroutine
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // para que a goroutine possa terminar
}

Essa abordagem permite encerrar goroutines de forma segura e controlada sem usar métodos inseguros.