Junior — Middle
Puoi fare un esempio di quando e come vengono utilizzati i canali per scambiare dati tra thread o goroutine?
sobes.tech AI
Risposta dell'AI
In Go, i canali vengono utilizzati per scambiare dati in modo sicuro tra le goroutine, consentendo di sincronizzarle e trasmettere valori.
Esempio di utilizzo di un canale per trasmettere numeri da una goroutine all'altra:
package main
import (
"fmt"
"time"
)
func producer(ch chan int) {
for i := 0; i < 5; i++ {
ch <- i // invia dati nel canale
time.Sleep(time.Millisecond * 500)
}
close(ch) // chiude il canale dopo aver inviato tutti i dati
}
func consumer(ch chan int) {
for val := range ch { // riceve dati dal canale
fmt.Println("Ricevuto:", val)
}
}
func main() {
ch := make(chan int)
go producer(ch)
consumer(ch)
}
Qui, producer invia numeri nel canale, e consumer li legge. I canali garantiscono un trasferimento sicuro dei dati senza la necessità di usare mutex o altri meccanismi di sincronizzazione.