Sobes.tech
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.