Junior — Middle
Kā pārvaldīt goroutine stāvokli un beigas Go?
sobes.tech AI
Atbilde no AI
Go bieži tiek kontrolēts ar kanāliem (channels) un kontekstiem (context).
- Kanāli ļauj pārraidīt signālus starp goroutine. Piemēram, var izveidot kanālu, lai paziņotu par nepieciešamību beigt:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Beidz goroutine
default:
// Veic darbu
}
}
}()
// Lai apturētu goroutine:
close(stop)
- Konteksta pakotne nodrošina ērtu veidu, kā pārvaldīt goroutine dzīves ilgumu, īpaši strādājot ar pieprasījumiem vai ilgstošām operācijām:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Beidz goroutine
default:
// Darbs
}
}
}(ctx)
// Lai apturētu:
cancel()
Tādējādi goroutine klausās signālus caur kanāliem vai kontekstiem un pareizi beidz darbu, saņemot signālu.