Junior — Middle
Jak można zarządzać stanem i zakończeniem goroutine w Go?
sobes.tech AI
Odpowiedź od AI
W Go zarządzanie stanem i kończenie goroutine zwykle odbywa się za pomocą kanałów (channels) i kontekstów (context).
- Kanały pozwalają na przesyłanie sygnałów między goroutine. Na przykład można utworzyć kanał do powiadomienia o konieczności zakończenia:
stop := make(chan struct{})
func() {
for {
select {
case <-stop:
return // Zakończ goroutine
default:
// Wykonuj pracę
}
}
}()
// Aby zatrzymać goroutine:
close(stop)
- Pakiet context zapewnia wygodny sposób zarządzania czasem życia goroutine, szczególnie przy pracy z żądaniami lub długotrwałymi operacjami:
ctx, cancel := context.WithCancel(context.Background())
func(ctx context.Context) {
for {
select {
case <-ctx.Done():
return // Zakończ goroutine
default:
// Praca
}
}
}(ctx)
// Aby zatrzymać:
cancel()
W ten sposób goroutine nasłuchują sygnałów przez kanały lub konteksty i poprawnie kończą pracę po otrzymaniu sygnału.