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ì:
- Si crea un contesto con un limite di tempo o timeout, ad esempio,
context.WithTimeout. - Quando il tempo scade, il contesto viene automaticamente annullato.
- La goroutine che ascolta questo contesto riceve un segnale di cancellazione attraverso il canale
Done(). - 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.