概述

通道的方向分为 发送接管。默认状况下,通道是双向的 (同时发送和接管),然而能够通过标识符指明通道为单向 (只读或只写)。

语法规定

可读写通道 (同时反对发送和接管)

变量 := make(chan 数据类型)# 例子ch := make(chan string)

只读通道 (只反对接管)

变量 := make(<-chan 数据类型)# 例子ch := make(<-chan string)

只写通道 (只反对发送)

变量 := make(chan<- 数据类型)# 例子ch := make(chan<- string)

类型转换

双向通道能够转换为单向通道,然而单向通道无奈转换为双向通道。

例子

package main// 参数是一个写入通道func ping(pings chan<- string) {    //<-pings                    // 谬误: pings 通道只能写入    pings <- "hello world"}func pong(pings <-chan string, pongs chan<- string) {    //pings <- "hello world"    // 谬误: pings 通道只能读取    //<-pongs                     // 谬误: pongs 通道只能写入    msg := <-pings    pongs <- msg}func main() {    pings := make(chan string)    pongs := make(chan string)    done := make(chan bool)    go ping(pings)    go pong(pings, pongs)    go func() {        msg := <-pongs        println(msg)        done <- true    }()    <-done    close(pings)    close(pongs)    close(done)}// $ go run main.go// 输入如下/**  hello world*/

分割我