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.