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

|
|
|
This send function only accepts a channel for sending
values. It would be a compile-time error to try to
receive on this channel.
|
func send(sendCh chan<- string, msg string) {
fmt.Println("send message:", msg)
sendCh <- msg
}
|
The fwd function accepts one channel for receives
(sendCh ) and a second for sends (forwardCh ).
|
func fwd(sendCh <-chan string, forwardCh chan<- string) {
msg := <-sendCh
fmt.Println("forwarding:", msg)
forwardCh <- msg
}
|
|
func main() {
sendCh := make(chan string, 1)
forwardCh := make(chan string, 1)
send(sendCh, "Hello, World!")
fwd(sendCh, forwardCh)
fmt.Println("reading messages: ", <-forwardCh)
}
|