Sobes.tech
Junior — Middle

È consentito inviare messaggi a un singolo canale con più goroutine contemporaneamente?

sobes.tech AI

Risposta dell'AI

Sì, in Go è consentito inviare messaggi a un canale da più goroutine contemporaneamente. I canali in Go sono thread-safe e garantiscono la sincronizzazione tra goroutine.

Tuttavia, è importante ricordare:

  • Se più goroutine scrivono in un canale e nessuno lo legge, si verificherà un blocco.
  • Se il canale è bufferizzato, le scritture si bloccheranno solo quando il buffer sarà pieno.
  • È necessario gestire attentamente la chiusura del canale: solo il mittente dovrebbe chiuderlo, e solo quando è sicuro che non ci saranno più scritture.

Esempio:

ch := make(chan int)

// Avviare più goroutine che inviano dati al canale
for i := 0; i < 3; i++ {
    go func(id int) {
        ch <- id
    }(i)
}

// Lettura dal canale
for i := 0; i < 3; i++ {
    fmt.Println(<-ch)
}

In questo modo, l’invio simultaneo a un canale da più goroutine è una pratica standard in Go.