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