Sobes.tech
Middle

Cos'è il contesto in Go? A cosa serve? Come funziona l'annullamento per timeout?

sobes.tech AI

Risposta dell'AI

In Go, context è un pacchetto e un concetto per gestire la durata delle operazioni, trasmettere segnali di cancellazione e impostare limiti di tempo tra goroutine.

Le principali funzioni del contesto:

  • Annullare operazioni (ad esempio, in caso di timeout o cancellazione da parte dell'utente),
  • Trasmettere valori (ad esempio, ID della richiesta) attraverso la catena di chiamate,
  • Impostare limiti di tempo (timeout).

L'annullamento tramite timeout funziona così:

  1. Si crea un contesto con un limite di tempo o timeout, ad esempio, context.WithTimeout.
  2. Quando il tempo scade, il contesto viene automaticamente annullato.
  3. La goroutine che ascolta questo contesto riceve un segnale di cancellazione attraverso il canale Done().
  4. La goroutine deve gestire correttamente l'annullamento (ad esempio, interrompendo il lavoro e liberando risorse).

Esempio:

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

select {
case <-time.After(3 * time.Second):
    fmt.Println("operazione completata")
case <-ctx.Done():
    fmt.Println("operazione cancellata o scaduta")
}

Qui, l'operazione verrà interrotta dopo 2 secondi se non termina prima.