其他分享
首页 > 其他分享> > 3.9 Go之单向通道

3.9 Go之单向通道

作者:互联网

3.9 Go之单向通道

什么是单向通道

channel本身支持读写操作,单向通道顾名思义是指一个通道只能读或者只能写

注意:

如果一个通道只能读或者只能写将毫无意义。所以单向channel的概念只是对channel的一种使用限制

单向通道的声明格式

关键点:

<指向哪儿数据往哪儿流

var 通道实例 chan<- 元素类型 // 只能写入(箭头指向通道意思是只能流入通道)
var 通道实例 <-chan 元素类型 // 只能读取(箭头指出通道意思是只能流出通道)

单通道使用例子

package main

func main() {
   // 声明一个通道
   ch := make(chan int)
   
   // 声明一个单向通道变量--->这里面不是很理解后面的赋值是什么意思,将ch赋值给chSendOnly在实际调用变量的时候用的还是chSendOnly
   var chSendOnly <-chan int = ch

   // 声明单项只接收通道
   var cnRecvOnly chan<- int = ch
}

time包中的单向通道

timerTimer类型:

type Timer struct {
   C <-chan Time
   /*
   C通道的类型就是一种只能读取的单向通道。如果此处不进行通道方向约束,一旦外部向通道写入数据,将会造成其他使用到计时器的地方逻辑产生混乱。
   */
   r runtimeTimer
}

timer包中的计时器返回timer实例:

timer := time.NewTimer(time.Second)

优点:

单向通道有利于代码接口的严谨性

关闭channel

如何关闭channel

调用go包下的close()函数:

close(ch)
如何判断channel已经被关闭
x, ok := <-ch

观察ok变量返回的布尔量即可

 

标签:单向,timer,实例,关闭,Go,3.9,channel,通道
来源: https://www.cnblogs.com/JunkingBoy/p/16033288.html