其他分享
首页 > 其他分享> > go基础知识-信道(channel)

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