Sobes.tech
Junior — Middle

Como implementar uma restrição de tempo de execução de uma operação usando context.WithTimeout em Go?

sobes.tech IA

Resposta da IA

No Go, para limitar o tempo de execução de uma operação, frequentemente usa-se um contexto com um timeout através da função context.WithTimeout. Ela retorna um novo contexto e uma função de cancelamento. Se a operação não terminar antes do tempo limite, o contexto é cancelado automaticamente.

Exemplo de uso:

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()

select {
case result := <-someLongRunningOperation(ctx):
    fmt.Println("Operação finalizada:", result)
case <-ctx.Done():
    fmt.Println("Tempo limite excedido:", ctx.Err())
}

Aqui, someLongRunningOperation deve aceitar ctx e verificar periodicamente ctx.Done() para uma interrupção adequada. Isso permite cancelar a operação com segurança em caso de timeout.