Junior — Middle
Come organizzare l'interazione e il trasferimento dei dati attraverso i canali nel sistema?
sobes.tech AI
Risposta dell'AI
In Go, l'interazione tra goroutine viene spesso organizzata tramite canali (channels), che sono pipeline tipizzate per il trasferimento di dati.
Per trasmettere dati, si crea un canale con make(chan Tipo). Le goroutine possono inviare dati nel canale usando l'operatore <-, e ricevere dati dallo stesso canale, garantendo la sincronizzazione.
Esempio:
package main
import (
"fmt"
"time"
)
func produttore(ch chan<- int) {
for i := 0; i < 5; i++ {
ch <- i // invio dati
time.Sleep(time.Millisecond * 500)
}
close(ch) // chiudiamo il canale per segnalare la fine
}
func consumatore(ch <-chan int) {
for val := range ch { // ricezione dati dal canale
fmt.Println("Ricevuto:", val)
}
}
func main() {
ch := make(chan int)
go produttore(ch)
consumatore(ch)
}
In questo modo, i canali permettono di trasmettere dati tra goroutine in modo sicuro ed efficiente, evitando condizioni di race e blocchi.