Sobes.tech
Junior — Middle

Koji događaji i signali se mogu koristiti za interakciju sa gorutinama u jeziku Go?

sobes.tech АИ

Одговор од АИ

U jeziku Go, sledeći osnovni mehanizmi se koriste za interakciju sa gorutinama:

  1. Kanali (channels) — glavni način prenosa podataka i signala između gorutina. Kroz kanale, može se slati i primati vrednosti, što omogućava sinhronizaciju.
ch := make(chan int)
go func() {
    ch <- 42 // slanje vrednosti
}()
val := <-ch // primanje vrednosti
  1. Kontekst (context.Context) — koristi se za upravljanje vremenom života gorutina, za otkazivanje operacija i prenos signala otkazivanja.
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
    select {
    case <-ctx.Done():
        // obrada otkazivanja
    }
}(ctx)
cancel() // signal otkazivanja
  1. sync.WaitGroup — za čekanje završetka grupe gorutina.

  2. Sistemski signali — putem paketa os/signal, mogu se uhvatiti sistemski signali i poslati gorutinama za ispravno završavanje.

Na ovaj način, glavni "događaji" za interakciju su operacije slanja/prijema putem kanala, otkazivanje putem konteksta i sistemski signali.