***我加了default应该不会执行go enqueue(chann)这个函数,因为没有default字句,select将阻塞,然而并不是我想的那样***
```go
package main
import (
"fmt"
"time"
)
func main() {
chann := make(chan int)
go enqueue(chann)
for {
select {
case v, ok := <-chann:
if ok {
fmt.Println(v)
} else {
fmt.Println("close")
return
}
default:
//fmt.Println("waiting")
}
}
}
func enqueue(chann chan int) {
time.Sleep(3 * time.Second)
chann <- 1
close(chann)
}
```
因为你在select外面加了一个for, 没有default时它会阻塞,直到enqueue所在的case执行, 加上default后,它会随机执行default和case,当case能正常执行时,随机执行到case会得出当前的结果。去掉select外的for可以实现你想要的结果。
#2
更多评论