Junior — Middle
Kuidas õigesti peatada goroutine'ide täitmine, kasutades konteksti Go-s?
sobes.tech AI
Vastus AI-lt
Õige goroutine'ide lõpetamiseks Go keeles kasutatakse sageli context paketti. Loobakse kontekst koos tühistamise võimalusega (context.WithCancel), mis edastatakse goroutine'ile. Goroutine'i sees kontrollitakse perioodiliselt konteksti olekut <-ctx.Done() kaudu. Kui tühistamise funktsioon kutsutakse välja, sulgub Done() kanal ja goroutine saab õigesti lõpetada.
Näide:
func worker(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Goroutine lõpetatud")
return
default:
// töö tegemine
}
}
}
func main() {
ctx, cancel := context.WithCancel(context.Background())
go worker(ctx)
// pärast teatud aega goroutine lõpetamine
time.Sleep(time.Second)
cancel()
time.Sleep(time.Millisecond * 100) // et goroutine saaks lõpetada
}
See lähenemine võimaldab turvaliselt ja kontrollitult lõpetada goroutine'id ilma ohtlike meetodite kasutamiseta.