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.