背景
默认情况下,通道是双向的,也就是,既可以往里面发送数据也可以同里面接收数据。
但是我们经常见一个通道作为参数进行传递而值希望对方是单向使用的,要么只让它发送数据,要么只汤它接收数据,这时候我们可以指定通道的方向。
单向channel变量的声明非常简单
var ch1 chan int //ch1是一个正常的channel,不是单向的
var ch2 chan<- float64 //ch2是单向的channel,只用于写float64数据
var ch3 <- chan int //ch3是单向的channel,只用于读取int数据
package main
import "fmt"
//此通道只能写,不能读
func producer(out chan<- int) {
for i := 0; i < 10; i++ {
out <- i * i
}
close(out)
}
//此通道只能读,不能写
func consumer(in <-chan int) {
for num := range in {
fmt.Println("num = ", num)
}
}
func main() {
// 创建一个channel,双向的
ch := make(chan int)
// 生产者,生产数字,写入channel
// 新开一个携程
go producer(ch) // channel传参,引用传递
// 消费者,从channel读取内容,打印
consumer(ch)
}
#结果
num = 0
num = 1
num = 4
num = 9
num = 16
num = 25
num = 36
num = 49
num = 64
num = 81
网友评论