Junior — Middle
Kako upravljati stanjem i završetkom goroutine u Go?
sobes.tech АИ
Одговор од АИ
U Go, upravljanje stanja i završetak goroutine obično se vrši pomoću kanala (channels) i konteksta (context).
- Kanali omogućavaju prenos signala između goroutine-a. Na primer, možete kreirati kanal za obaveštavanje o potrebi za završetkom:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Završava goroutine
default:
// Obavlja posao
}
}
}()
// Za zaustavljanje goroutine-a:
close(stop)
- Paket context pruža zgodan način za upravljanje vremenom trajanja goroutine-a, posebno pri radu sa zahtevima ili dugotrajnim operacijama:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Završava goroutine
default:
// Rad
}
}
}(ctx)
// Za zaustavljanje:
cancel()
Na ovaj način, goroutine-ovi slušaju signale putem kanala ili konteksta i pravilno završavaju rad kada prime signal.