Junior — Middle
Je možné, že sa gorutina preruší alebo sama ukončí?
sobes.tech AI
Odpoveď od AI
V Go môže byť vykonávanie goroutine ukončené samostatne v niekoľkých prípadoch:
- Goroutine ukončila svoju funkciu. Hneď ako funkcia spustená v goroutine skončí, goroutine sa zatvorí.
- Panik vnútri goroutine. Ak dôjde k panike vnútri goroutine a nie je spracovaná, goroutine sa ukončí náhle.
- Zrušenie cez kontext (context). Ak goroutine počúva signál zrušenia cez
context.Contexta ten dostane, môže sa správne ukončiť.
Je dôležité pochopiť, že goroutine nie sú nútene prerušované zvonku — musíte implementovať mechanizmus zastavenia sami, napríklad cez kanály alebo kontexty.
Príklad použitia kontextu na zrušenie goroutine:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine ukončená")
return
default:
// práca
}
}
}(ctx)
// V určitom momente zavoláme cancel()
cancel()
Týmto spôsobom sa goroutine ukončí buď sama po dokončení práce, alebo na signál zrušenia, ak je to predpísané.