```
package main
import (
"fmt"
//"time"
)
func main() {
c := make(chan int)
go func() {
fmt.Printf("xxxxx\n")
c <- 1
fmt.Printf("yyyyy\n")
}()
//time.Sleep(time.Second * 1)
fmt.Printf("11111\n")
fmt.Printf("channel output:%d\n", <- c)
fmt.Printf("22222\n")
}
```
为什么输出的是:
11111
xxxxx
yyyyy
channel output:1
22222
输出完xxxxx不是得堵塞吗,怎么xxxx输出完之后yyyyy也输出了。加个超时就没问题(time)。
不带缓冲区的chan 会看是否有因为读该chan而阻塞的goroutine,有可以正常写,如果没有就会阻塞。很明显,fmt.Printf("channel output:%d\n", <- c) 这段代码运行之后 go func() { ... 才执行,所以不会阻塞
#1
更多评论