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