Junior — Middle
Da li je moguće da se gorutina prekinu ili sama zaustavi?
sobes.tech АИ
Одговор од АИ
U Go, izvršenje goroutine može se samostalno završiti u nekoliko slučajeva:
- Goroutine je završila svoju funkciju. Čim funkcija pokrenuta u goroutine završi, goroutine se zatvara.
- Panik unutar goroutine. Ako dođe do panike unutar goroutine i ona nije obrađena, goroutine će neočekivano završiti.
- Otkazivanje putem konteksta (context). Ako goroutine sluša signal otkazivanja putem
context.Contexti primi ga, može se pravilno zatvoriti.
Važno je razumeti da goroutine-ovi nisu prisilno prekinuti spolja — morate sami implementirati mehanizam za zaustavljanje, na primer, putem kanala ili konteksta.
Primer korišćenja konteksta za otkazivanje goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine je završila")
return
default:
// rad
}
}
}(ctx)
// U nekom trenutku pozivamo cancel()
cancel()
Na ovaj način, goroutine se završava ili sama nakon završetka rada, ili na signal otkazivanja, ako je to predviđeno.