Sobes.tech
Junior — Middle

Ce construcții principale sunt utilizate pentru gestionarea și executarea goroutine-urilor în limbajul de programare?

sobes.tech AI

Răspuns de la AI

Pentru gestionarea și executarea goroutine-urilor în Go, se utilizează următoarele construcții principale:

  • Pornirea unei goroutine: cuvântul cheie go înainte de apelarea unei funcții o pornește într-o goroutine separată, de exemplu:

    go funcțiaMea()
    

    Acest lucru permite executarea funcției asincron.

  • Canale (channels): sunt folosite pentru sincronizare și schimb de date între goroutine-uri. Un canal se creează astfel:

    ch := make(chan int)
    

    Trimiterea și primirea datelor:

    ch <- 42      // trimitere
    val := <-ch   // primire
    

    Canalele asigură o comunicare sigură și blochează goroutine-ul dacă datele nu sunt gata.

  • sync.WaitGroup: este folosit pentru a aștepta finalizarea unui grup de goroutine-uri. Exemplu:

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // lucru goroutine
    }()
    wg.Wait() // așteaptă finalizarea tuturor goroutine-urilor
    
  • select: permite așteptarea simultană a mai multor operații cu canale, alegând cea gata de executat. Exemplu:

    select {
    case msg := <-ch1:
        fmt.Println("Primite de la ch1:", msg)
    case ch2 <- 42:
        fmt.Println("Trimis la ch2")
    default:
        fmt.Println("Nicio operație nu este gata")
    }
    

Aceste construcții permit lansarea, sincronizarea și gestionarea execuției paralele în Go.