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)
}
运行结果如下:
接通电源!启动!准备就绪,开始行万里路....
ICP备案:
公安联网备案: