首页 > 其他 > 详细

go channel总结

时间:2016-01-06 20:02:39      阅读:165      评论:0      收藏:0      [点我收藏+]

1、创建

无缓冲
var chs1 = make(chan int)
var chs2 = make(chan float64)
var chs3 = make(chan string)
有缓冲
var chs1 = make(chan int, 3)
var chs2 = make(chan float64, 3)
var chs3 = make(chan string, 3)

有缓冲和无缓冲的区别:
写数据时缓冲模式且缓冲未满时可以直接写入,不会阻塞,缓冲满时会阻塞等待对方读,
无缓冲模式写入会阻塞到对方读完数据
读数据缓冲模式可以读取缓冲已有的数据,否则需要阻塞等待对方写
无缓冲模式需要阻塞等待对方写

2、关闭
var chs1 = make(chan int)
close(chs1)

对关闭后的channel读,chan int 类型返回0,chan bool 返回false,chan string返回空
也可以这么判断:
v, ok := <-chs1 //chs1关闭后ok为false
if ok {
fmt.Println(v)
}

对关闭后的channel写会panic

3、超时
channel本身没有超时
一般这么做:

ch := make(chan int)
t := time.After(time.Second * 2)
select {
case v, ok := <-ch:
if ok {
//do something
}
case <-t:
fmt.Println("timeout")
}

go channel总结

原文:http://www.cnblogs.com/chukuang2004/p/5106591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!