Go by Example - IT: Channel

I channel sono i pipe che connettono goroutine concorrenti. Puoi mandare e ricevere dei valori da una goroutine a un’altra goroutine attraverso un channel.

package main
import "fmt"
func main() {

Puoi creare un nuovo channel con la sintassi make(chan tipo). I channel sono dichiarati con i tipi dei valori che possono veicolare.

    messages := make(chan string)

Puoi inviare un valore in un channel con la sintassi channel <-. Di seguito mandiamo la stringa "ping" al channel messages che abbiamo dichiarato in precedenza, in una nuova goroutine.

    go func() { messages <- "ping" }()

Puoi ricevere un valore da un channel con la sintassi <-channel. Di seguito riceveremo il messaggio "ping" che abbiamo inviato a messages precedentemente nella goroutine e lo stamperemo.

    msg := <-messages
    fmt.Println(msg)
}

Quando eseguiremo il programma potremmo vedere che "ping" è passato senza problemi da una goroutine all’altra attraverso il nostro channel.

$ go run channels.go 
ping

Di default l’invio e il ricevimento si bloccano finché sia il mittente che il destinatario non sono pronti. Questo ci ha permesso di aspettare alla fine del programma per il messaggio "ping" senza dover effetturare alcuna sincronizzazione.

Prossimo esempio: Channel con Buffer.