Sobes.tech
Junior — Middle

Cum se poate opri corect execuția goroutine-urilor folosind context în Go?

sobes.tech AI

Răspuns de la AI

Pentru a opri corect goroutine-urile în Go, se folosește adesea pachetul context. Se creează un context cu posibilitatea de anulare (context.WithCancel), care este transmis goroutine-ului. În interiorul goroutine-ului, starea contextului este verificată periodic prin <-ctx.Done(). Când se apelează funcția de anulare, canalul Done() se închide, iar goroutine-ul poate încheia corect.

Exemplu:

func worker(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Goroutine oprită")
            return
        default:
            // execută sarcina
        }
    }
}

func main() {
    ctx, cancel := context.WithCancel(context.Background())
    go worker(ctx)

    // după un timp, oprim goroutine-ul
    time.Sleep(time.Second)
    cancel()
    time.Sleep(time.Millisecond * 100) // pentru ca goroutine-ul să se încheie
}

Această abordare permite închiderea sigură și controlată a goroutine-urilor fără a folosi metode nesigure.