Middle
Wat is de context in Go? Waarvoor wordt het gebruikt? Hoe werkt annulering op timeout?
sobes.tech AI
Antwoord van AI
In Go is context een pakket en een concept voor het beheren van de levensduur van operaties, het overdragen van cancel-signalen en het instellen van tijdslimieten tussen goroutines.
De belangrijkste taken van de context:
- Het annuleren van operaties (bijvoorbeeld bij timeout of annulering door de gebruiker),
- Het overdragen van waarden (bijvoorbeeld, aanvraag-ID) door de keten van oproepen,
- Het instellen van tijdslimieten (timeouts).
Timeout-gestuurde annulering werkt als volgt:
- Er wordt een context gemaakt met een tijdslimiet of timeout, bijvoorbeeld
context.WithTimeout. - Wanneer de tijd om is, wordt de context automatisch geannuleerd.
- De goroutine die naar deze context luistert, ontvangt een annulering signaal via het kanaal
Done(). - De goroutine moet de annulering correct afhandelen (bijvoorbeeld, het werk onderbreken en bronnen vrijmaken).
Voorbeeld:
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
select {
case <-time.After(3 * time.Second):
fmt.Println("operatie voltooid")
case <-ctx.Done():
fmt.Println("operatie geannuleerd of verlopen")
}
Hier wordt de operatie na 2 seconden onderbroken, tenzij deze eerder voltooid is.