go基础知识-信道(channel)
作者:互联网
1.channel:go特殊的数据类型,用于通信,使用的时候需要注意下结合使用不当容易造成死锁,在结合 for select 里使用break是没效果的
2.语法定义: <-chan 读取, chan<-写入
var chA = make(chan Type,len)//有缓冲
var chB = make(chan Type)//无缓冲
从无缓冲的 channel 中读取消息会阻塞,直到有 goroutine 向该 channel 中发送消息; 同理,向无缓存的 channel 中发送消息也会阻塞,直到有 goroutine 从 channel 中读取消息案例:
func main(){
var chA = make(chan int)
go func(chTemp <-chan int) {
for{
select {
//如果通道关闭则ok为false
case b,ok := <- chTemp:
if ok {
fmt.Println(b)
}else {
goto End
}
//default: //如果没有default字句,select将阻塞,直到某个通信可以运行
// fmt.Println("default")
}
}
End: fmt.Println("end")
}(chA)
//或者
//for v := range chA{
// fmt.Println(v)
//}
go func(chTemp chan<- int){
for i:=0;i<10;i++ {
chTemp <- i
}
close(chTemp)
}(chA)
time.Sleep(3 * 1e9)
}
结果输出:0,1,2,3,4,5,6,7,8,9
标签:chA,chTemp,chan,基础知识,Println,go,channel 来源: https://www.cnblogs.com/yyouki/p/15965789.html