Sobes.tech
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.Context en 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.