Sobes.tech
Senior

Pode dar exemplos de uso de WithCancel, WithTimeout e WithDeadline?

sobes.tech IA

Resposta da IA

No pacote context do Go, existem funções para criar contextos com capacidade de cancelamento e limite de tempo de execução:

  • WithCancel — cria um contexto que pode ser cancelado manualmente chamando a função cancel(). É usado quando é necessário interromper uma operação por evento.

  • WithTimeout — cria um contexto que é cancelado automaticamente após um intervalo de tempo definido.

  • WithDeadline — cria um contexto que é cancelado num momento específico.

Exemplos:

ctx, cancel := context.WithCancel(context.Background())
// Iniciamos uma goroutine que cancelará o contexto após 2 segundos
go func() {
    time.Sleep(2 * time.Second)
    cancel()
}()

select {
case <-ctx.Done():
    fmt.Println("Operação cancelada")
}

// WithTimeout
ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 3*time.Second)
defer cancelTimeout()
// operação que será interrompida após 3 segundos

// WithDeadline
deadline := time.Now().Add(5 * time.Second)
ctxDeadline, cancelDeadline := context.WithDeadline(context.Background(), deadline)
defer cancelDeadline()
// operação que será interrompida no momento definido

Estes mecanismos são úteis para controlar o duração de pedidos, cancelar operações longas e gerir recursos.