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