| When using channels as function parameters, you can specify if a channel is meant to only send or receive values. This specificity increases the type-safety of the program. | ||
| package main | ||
| import "fmt" | ||
| This `ping` function only accepts a channel for sending values. It would be a compile-time error to try to receive on this channel. | func ping(pings chan<- string, msg string) { | |
| pings <- msg | ||
| } | ||
| The `pong` function accepts one channel for receives (`pings`) and a second for sends (`pongs`). | func pong(pings <-chan string, pongs chan<- string) { | |
| msg := <-pings | ||
| pongs <- msg | ||
| } | ||
| func main() { | ||
| pings := make(chan string, 1) | ||
| pongs := make(chan string, 1) | ||
| ping(pings, "passed message") | ||
| pong(pings, pongs) | ||
| fmt.Println(<-pongs) | passed message | |
| } |