Sobes.tech
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).

  1. 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)
  1. 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.