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:
- 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
- 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
-
sync.WaitGroup — do oczekiwania na zakończenie grupy gorutyn.
-
Sygnały systemowe — przez pakiet
os/signalmoż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.