通常都是定义读写双向的 chan,定义单向 chan 问题。
专栏的介绍可以参考 《GotchaGolang专栏》,代码可以看《宝库-Gotcha》。
通过 只写 chan 传递另一个只读的 chan,怎么写?
案例
平常一般是这么声明 chan 的:
12345678910 |
package main import "fmt" func () { xChan := make(chan int) fmt.Println(len(xChan)); //0} |
要声明一个单向的 chan 可以使用这一的方式:大专栏 Golang: chan定义问题(7)p>
12 |
chan<- float64 // 只写 float64 类型变量 (write-only)<-chan int // 只读 int 类型变量 (read-only) |
传递 chan 变量怎么办?
123 |
chan<- chan int //传递双向 chan, 同 chan<- (chan int)chan<- <-chan int //传递只读 给只写chan, 同 chan<- (<-chan int)<-chan <-chan int //传递只读chan 给只读chan 同 <-chan (<-chan int) |
总结
定义只读,只写的类型,看上去比较诡异,可以把 <-chan
,chan<-
看做类型即可,同 chan
一样。
Merlin 2018.3 chan 的定义问题
原文地址:https://www.cnblogs.com/lijianming180/p/12251421.html
时间: 2024-11-14 13:23:44