Junior — Middle
Какви събития и сигнали могат да се използват за взаимодействие с горутините в езика Go?
sobes.tech AI
Отговор от AI
В езика Go, следните основни механизми се използват за взаимодействие с горутините:
- Канали (channels) — основният начин за пренос на данни и сигнали между горутините. Чрез каналите може да се изпращат и получават стойности, което позволява синхронизация.
ch := make(chan int)
go func() {
ch <- 42 // изпращане на стойност
}()
val := <-ch // получаване на стойност
- Контекст (context.Context) — използва се за управление на живота на горутините, за анулиране на операции и за пренос на сигнали за анулиране.
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
select {
case <-ctx.Done():
// обработка на анулиране
}
}(ctx)
cancel() // сигнал за анулиране
-
sync.WaitGroup — за изчакване на завършването на група горутини.
-
Сигнали на операционната система — чрез пакета
os/signalмогат да се прихващат системни сигнали и да се изпращат към горутините за коректно приключване.
По този начин, основните "събития" за взаимодействие са операциите за изпращане/приемане чрез каналите, анулирането чрез контекста и системните сигнали.