Sobes.tech
Junior — Middle

Come implementare un limite di tempo di esecuzione di un'operazione usando context.WithTimeout in Go?

sobes.tech AI

Risposta dell'AI

In Go, per limitare il tempo di esecuzione di un'operazione, si utilizza spesso un contesto con timeout tramite la funzione context.WithTimeout. Questa restituisce un nuovo contesto e una funzione di cancellazione. Se l'operazione non termina prima dello scadere del timeout, il contesto viene automaticamente cancellato.

Esempio di utilizzo:

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

select {
case result := <-someLongRunningOperation(ctx):
    fmt.Println("Operazione terminata:", result)
case <-ctx.Done():
    fmt.Println("Timeout superato:", ctx.Err())
}

Qui, someLongRunningOperation dovrebbe accettare ctx e verificare periodicamente ctx.Done() per un'interruzione corretta. Questo permette di annullare in modo sicuro l'operazione in caso di timeout.