Sobes.tech
Junior — Middle

Jakie zdarzenia i sygnały można użyć do interakcji z goroutines w języku Go?

sobes.tech AI

Odpowiedź od AI

W języku Go główne mechanizmy wykorzystywane do interakcji z gorutynami to:

  1. Kanały (channels) — podstawowy sposób przesyłania danych i sygnałów między gorutynami. Poprzez kanały można wysyłać i odbierać wartości, co pozwala na synchronizację.
ch := make(chan int)
go func() {
    ch <- 42 // wysłanie wartości
}()
val := <-ch // odbiór wartości
  1. Kontekst (context.Context) — służy do zarządzania czasem życia gorutyn, anulowania operacji i przesyłania sygnałów anulowania.
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
    select {
    case <-ctx.Done():
        // obsługa anulowania
    }
}(ctx)
cancel() // sygnał anulowania
  1. sync.WaitGroup — do oczekiwania na zakończenie grupy gorutyn.

  2. Sygnały systemowe — przez pakiet os/signal można przechwytywać sygnały systemowe i przekazywać je gorutynom w celu poprawnego zakończenia.

W ten sposób głównymi "zdarzeniami" do interakcji są operacje wysyłania/odbierania przez kanały, anulowanie przez kontekst i sygnały systemowe.