func main(){
timeout := 10 * time.Second //Duration类型
var after <-chan time.Time //声明变量
after = time.After(timeout) //timeout时间后返回一个time.Time类型通道,此处不会阻塞
fmt.Println("now time=",time.Now())
num := make(chan int )
select {
case s, ok := <-num:
if ok{
fmt.Println(s)
}
case <-after:
fmt.Println("after")
default: //若没有default会一直阻塞,一直到有任何一个chan有io才会往下执行
fmt.Println("default")
}
fmt.Println("test2")
}
输出结果
select中有default的时候输出
now time= 2017-08-04 11:41:58.365915 +0800 CST
default
test2
select中没有default的时候输出
now time= 2017-08-04 11:42:54.0376779 +0800 CST 等待10秒后
//等待10秒后
after
test2