Go by Example: Canali

I canali sono le pipe che collegano le goroutine concorrenti. Puoi inviare valori nei canali da una goroutine e ricevere quei valori in un’altra goroutine.

package main
import "fmt"
func main() {

Crea un nuovo canale con make(chan val-type). I canali sono tipizzati dai valori che trasportano.

    messages := make(chan string)

Invia un valore in un canale usando la sintassi channel <-. Qui inviamo "ping" al canale messages che abbiamo creato sopra, da una nuova goroutine.

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

La sintassi <-channel riceve un valore dal canale. Qui riceveremo il messaggio "ping" che abbiamo inviato sopra e lo stamperemo.

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

Quando eseguiamo il programma il messaggio "ping" viene passato con successo da una goroutine a un’altra tramite il nostro canale.

$ go run canali.go 
ping

Per default invii e ricezioni si bloccano finché sia il mittente che il ricevente sono pronti. Questa proprietà ci ha permesso di aspettare alla fine del nostro programma il messaggio "ping" senza dover usare altre sincronizzazioni.

Prossimo esempio: .