Sobes.tech
Junior — Middle

Quali sono le principali strutture utilizzate per gestire ed eseguire le goroutine nel linguaggio di programmazione?

sobes.tech AI

Risposta dell'AI

Per gestire ed eseguire le goroutine in Go, si utilizzano le seguenti strutture principali:

  • Avvio di una goroutine: la parola chiave go prima di chiamare una funzione la esegue in una goroutine separata, ad esempio:

    go miaFunzione()
    

    Questo permette di eseguire la funzione in modo asincrono.

  • Canali (channels): vengono usati per sincronizzare e scambiare dati tra goroutine. Un canale si crea così:

    ch := make(chan int)
    

    Invio e ricezione di dati:

    ch <- 42      // invio
    val := <-ch   // ricezione
    

    I canali garantiscono una comunicazione sicura e bloccano la goroutine se i dati non sono pronti.

  • sync.WaitGroup: viene usato per aspettare che un gruppo di goroutine finisca. Esempio:

    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        // lavoro della goroutine
    }()
    wg.Wait() // aspetta che tutte le goroutine finiscano
    
  • select: permette di aspettare più operazioni sui canali contemporaneamente, scegliendo quella pronta. Esempio:

    select {
    case msg := <-ch1:
        fmt.Println("Ricevuto da ch1:", msg)
    case ch2 <- 42:
        fmt.Println("Inviato a ch2")
    default:
        fmt.Println("Nessuna operazione pronta")
    }
    

Queste strutture permettono di avviare, sincronizzare e gestire l'esecuzione parallela in Go.