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.