Sobes.tech
Junior — Middle

Какви събития и сигнали могат да се използват за взаимодействие с горутините в езика Go?

sobes.tech AI

Отговор от AI

В езика Go, следните основни механизми се използват за взаимодействие с горутините:

  1. Канали (channels) — основният начин за пренос на данни и сигнали между горутините. Чрез каналите може да се изпращат и получават стойности, което позволява синхронизация.
ch := make(chan int)
go func() {
    ch <- 42 // изпращане на стойност
}()
val := <-ch // получаване на стойност
  1. Контекст (context.Context) — използва се за управление на живота на горутините, за анулиране на операции и за пренос на сигнали за анулиране.
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
    select {
    case <-ctx.Done():
        // обработка на анулиране
    }
}(ctx)
cancel() // сигнал за анулиране
  1. sync.WaitGroup — за изчакване на завършването на група горутини.

  2. Сигнали на операционната система — чрез пакета os/signal могат да се прихващат системни сигнали и да се изпращат към горутините за коректно приключване.

По този начин, основните "събития" за взаимодействие са операциите за изпращане/приемане чрез каналите, анулирането чрез контекста и системните сигнали.