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

回到顶部