Sobes.tech
Junior — Middle

Ce evenimente și semnale pot fi utilizate pentru a interacționa cu goroutine-urile în limbajul Go?

sobes.tech AI

Răspuns de la AI

În limbajul Go, următoarele mecanisme principale sunt utilizate pentru a interacționa cu goroutine-urile:

  1. Canale (channels) — principalul mod de transmitere a datelor și semnalelor între goroutine-uri. Prin canale, se pot trimite și primi valori, ceea ce permite sincronizarea.
ch := make(chan int)
go func() {
    ch <- 42 // trimiterea unei valori
}()
val := <-ch // primirea unei valori
  1. Context (context.Context) — folosit pentru a gestiona durata de viață a goroutine-urilor, pentru a anula operațiuni și pentru a transmite semnale de anulare.
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
    select {
    case <-ctx.Done():
        // tratarea anulării
    }
}(ctx)
cancel() // semnal de anulare
  1. sync.WaitGroup — pentru a aștepta finalizarea unui grup de goroutine-uri.

  2. Semnale ale sistemului de operare — prin pachetul os/signal, se pot captura semnale ale sistemului și le pot trimite goroutine-urilor pentru o încheiere corectă.

Astfel, principalele "evenimente" pentru interacțiune sunt operațiunile de trimitere/primire prin canale, anularea prin context și semnalele sistemului.