Junior — Middle
Is het mogelijk dat een goroutine wordt onderbroken of vanzelf stopt?
sobes.tech AI
Antwoord van AI
In Go kan de uitvoering van een goroutine op verschillende manieren vanzelf stoppen:
- De goroutine heeft zijn functie voltooid. Zodra de functie die in de goroutine wordt uitgevoerd, eindigt, wordt de goroutine afgesloten.
- Panieken binnen de goroutine. Als er een panic optreedt binnen de goroutine en deze niet wordt afgehandeld, zal de goroutine abrupt eindigen.
- Annulering via de context (context). Als de goroutine luistert naar een annuleringssignaal via
context.Contexten dit ontvangt, kan deze correct worden afgesloten.
Het is belangrijk te begrijpen dat goroutines niet van buitenaf geforceerd worden onderbroken — je moet zelf een stopmechanisme implementeren, bijvoorbeeld via kanalen of contexten.
Voorbeeld van het gebruik van context om een goroutine te annuleren:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine beëindigd")
return
default:
// werk
}
}
}(ctx)
// Op een bepaald moment roepen we cancel()
cancel()
Op deze manier stopt de goroutine ofwel door zelf te voltooien, of door een annuleringssignaal, indien voorzien.