运行这个代码,https://studygolang.com/articles/8135
居然直接打印call就退出了
到底问题出在哪里??跪求高人告知
跪求高人告知
跪求高人告知
跪求高人告知
![捕获.PNG](https://static.studygolang.com/180330/d2ddc235c81a2643f3fd7daf08552264.PNG)
第 1 条附言 ·
我没说明白,是func aaa中的sleep失效了
第 2 条附言 ·
抱歉没说明白
按逻辑,新增加goroutine来执行func aaa,主线程执行到select应该阻塞等待chan,然后CPU调度到goroutine,延时3秒,然后往chan写数据,主线程收到数据,打印call
问题就是应该是3秒后打印call,而不是立即打印
第 3 条附言 ·
抱歉了各位。是我搞错了
我不应该使用go run来测试
应该go build -o test test.go
生成二进制来测试完全没问题
![捕获.PNG](https://static.studygolang.com/180330/bc6d28133e0308bfc4a2f7b4c79340d4.PNG)
```golang
func main() {
go aaa()
for {
select {
case <-ch: //拿到锁
fmt.Println("call")
case <-time.After(5 * time.Second): //超时5s
fmt.Println("5 sec call")
}
}
}
```
#2
更多评论
主机是linux(ubuntu 14.04、ubuntu 16.06都试过)
系统都是386
![捕获.PNG](https://static.studygolang.com/180330/22fdbfabaeddb84a45b13ac1fde2601b.PNG)
#1
抱歉是我没说明白,我知道加for循环不会退出,但是aaa中的time.Sleep失效
按逻辑,新增加goroutine来执行func aaa,主线程执行到select应该阻塞等待chan,然后CPU调度到goroutine,延时3秒,然后往chan写数据,主线程收到数据,打印call
问题就是应该是3秒后打印call,而不是立即打印
#3