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.