本文共 471 字,大约阅读时间需要 1 分钟。
有时候由这样的需求,要读取一个channel上的消息,查看在此刻通道上是否有消息,如果没有也不用阻塞,程序继续向下执行。
常规的读取方式肯定会导致阻塞,因为不一定有程序正在写通道;
我们可以借助 select 的方式来满足这个需求。
ch1 := make(chan int)go func(){ time.Sleep(3*time.Second) ch1<-1}()select { default: fmt.Println("no")case <-ch1: fmt.Println("yes")}
代码执行结果为 no
,可见并没有阻塞住。
ch1 := make(chan int)go func(){ time.Sleep(3*time.Second) ch1<-1}()select { case <-time.After(1 * time.Second): fmt.Println("no")case <-ch1: fmt.Println("yes")}
转载地址:http://ynaui.baihongyu.com/