比如
var c = make(chan int, 1)
func test() {
for {
tmp: <-c
fmt.Println("如果c是非阻塞,我会一直被循环打印")
}
}
func main() {
c<- 6 //这一步是往管道里写,是非阻塞的,因为设了缓冲
test() //那么从管道里读呢,能直接非阻塞吗,我意思是说即使把缓冲读完了,依旧要非阻塞
}
有疑问加站长微信联系(非本文作者)

比如
var c = make(chan int, 1)
func test() {
for {
tmp: <-c
fmt.Println("如果c是非阻塞,我会一直被循环打印")
}
}
func main() {
c<- 6 //这一步是往管道里写,是非阻塞的,因为设了缓冲
test() //那么从管道里读呢,能直接非阻塞吗,我意思是说即使把缓冲读完了,依旧要非阻塞
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
channel 的特性就是这样的
select配合 default
@mortemnh 这种方式可行,不知道是不是楼主要的
select配合default,确实可以达到那个效果,但是channel本身还是阻塞的,看起来golang的channel没法设成NonBlock
好吧,知道了,谢谢
你可以判断一下C的数量
你是说管道中元素的数量?
chan的数据结构体本身设计就是阻塞的,你要非阻塞的自己自定义一个结构就可以了;阻塞结构设计比非阻塞结构难。chan不是高级结构体是基础结构体,本身功能就要足够单一
ok
对的,if len(c)>0{}