gochannel
上一篇说了go的goroutine,那这一篇就来说说channel吧。
channel,中文意思是通道,在go里面被用于goroutine之间通讯,共享资源。channel分为两种一种是unbuffered(无缓冲),另一种是buffered(缓冲);无缓冲顾名思义就是在没有接受前该channel没有任何能力保存任何值,直到接受完毕;buffered就是说在没有接受之前该channel可以接受一定的数据,数据容量又定义的buffered决定。
channel通常和select同时使用,用来接受或者发送消息,告知另一个channel数据或者goroutine是否关闭了。select的每一个case都应该是通信操作,或者说是io操作,简单的说select就是用来监听通信操作的,当有一个通信操作触发某一个case的时候就会被执行,否则就会执行default操作,如果没有default就会阻塞直到满足某一个case。例如:
for{select{
case data1, ok :=<-channel1:
if(!ok){
fmt.Println(" ... channel1 closed!")
}else{
fmt.Println("Received from channel1", data1)
}
case data2, ok :=<-channel2:
if(!ok){
fmt.Println(" ... channel2 closed!")
}else{
fmt.Println("Received from hannel2", data2)
}
}
}
以上是 gochannel 的全部内容, 来源链接: utcz.com/z/514621.html