Go语言单向通道的用法(附带实例)
单向通道是指只能发送数据或只能接收数据的通道。单向通道实质上是对通道的一种使用限制。
Go 语言中,单向通道的语法格式如下:
下例演示单向通道的使用方法。
【实例】打印启动汽车的步骤:
代码如下:
Go 语言中,单向通道的语法格式如下:
var name chan<-type // 只能发送数据的通道 var name <-chan type // 只能接收数据的通道参数说明如下:
- var:Go 语言关键字,用于声明变量;
- name:通道的名称;
- chan:Go 语言关键字,通道类型;
- type:在通道内部传输的数据的类型。
下例演示单向通道的使用方法。
【实例】打印启动汽车的步骤:
- 首先,定义表示“接通电源”的 electrify() 函数,参数是只能发送数据的通道 chel,使用通道发送数据。
- 然后,定义表示“启动(发动机)”的start()函数,包含两个参数,分别是只能接收数据的通道 ch1 和只能发送数据的通道 ch2;变量 data 接收通道 ch1 传输的数据,使用通道 ch2 发送数据。
- 接着,定义表示“驾驶”的 drive() 函数,参数是只能发送数据的通道 ch;使用 for range 语句接收并遍历通道传输的数据。
- 最后,在 main() 函数中执行并发程序,并调用表示“驾驶”的函数。
代码如下:
package main import ( "fmt" ) // 表示“接通电源”的函数,参数是只能发送数据的通道 chel func electrify(chel chan<- string) { chel <- "接通电源!" // 使用通道发送字符串 close(chel) // 关闭通道 } // 表示“启动(发动机)”的函数,参数有两个: // ch1:只能接收数据的通道 // ch2:只能发送数据的通道 func start(ch1 <-chan string, ch2 chan<- string) { data := <-ch1 // 变量 data 接收通道 ch1 传输的数据 ch2 <- data + "启动!" // 使用通道 ch2 发送数据 close(ch2) // 关闭通道 } // 表示“驾驶”的函数,参数是只能发送数据的通道 ch func drive(ch <-chan string) { for data := range ch { // 遍历通道传输的数据 fmt.Println(data + "准备就绪,开始行万里路...") // 如果遍历的结果是 5 } } func main() { ch1 := make(chan string) // 创建通道 ch1 ch2 := make(chan string) // 创建通道 ch2 // 执行并发程序 go electrify(ch1) go start(ch1, ch2) // 调用表示“驾驶”的函数 drive(ch2) }运行结果如下:
接通电源!启动!准备就绪,开始行万里路....