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