码迷,mamicode.com
首页 > 其他好文 > 详细

go channel总结

时间:2016-01-06 20:04:15      阅读:120      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!