Junior — Middle
Je možné, že goroutine bude přerušena nebo se sama ukončí?
sobes.tech AI
Odpověď od AI
V Go může být provádění gorutiny ukončeno samostatně v několika případech:
- Gorutina dokončila svou funkci. Jakmile funkce spuštěná v gorutině doběhne, gorutina se ukončí.
- Panik uvnitř gorutiny. Pokud dojde k panice uvnitř gorutiny a není ošetřena, gorutina se ukončí náhle.
- Zrušení přes kontext (context). Pokud gorutina poslouchá signál zrušení přes
context.Contexta ten obdrží, může se správně ukončit.
Je důležité pochopit, že gorutiny nejsou nuceně přerušovány zvenčí — je třeba implementovat mechanismus zastavení sami, například přes kanály nebo kontexty.
Příklad použití kontextu pro zrušení gorutiny:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Gorutina ukončena")
return
default:
// práce
}
}
}(ctx)
// V nějakém okamžiku zavoláme cancel()
cancel()
Tímto způsobem se gorutina ukončí buď sama po dokončení práce, nebo na signál zrušení, pokud je to předvídáno.