请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

select

老师,为什么这里打出来的都是case w <- n : 的情况?我已经把前面的time.sleep去掉了,c1,c2应该是有数据的,为什么select不会执行相关的case?执行的都是w <- n这个case。
图片描述

正在回答

2回答

ccmouse 2020-03-28 10:50:32

三个分支都会选中,这里因为一开始有n:=0,所以送给worker的数据永远是0。

我们把n:=0移到for的前面就可以看到c1,c2送过来的数据了。

0 回复 有任何疑惑可以回复我~
  • 提问者 五栋一哥 #1
    好的!明白了!谢谢老师
    回复 有任何疑惑可以回复我~ 2020-03-28 12:38:21
  • 提问者 五栋一哥 #2
    老师,还有一个问题,就是关于timeout的问题,我把generator中的time.sleep时间已经缩小到100Microsecond,但在运行中,还是一直打出的是timeout,只有个别打出的是数据?
    回复 有任何疑惑可以回复我~ 2020-03-28 15:37:21
  • 提问者 五栋一哥 #3
    懂了,打错了。。。
    回复 有任何疑惑可以回复我~ 2020-03-28 15:41:43
慕侠5029079 2020-10-10 10:03:32

但是我把内容输出的时候,是有进入其他case的,是因为我的代码错了?

func main() {
  var c1, c2 = generator(), generator()
  w := createWorker(0)
  for {
     n := 0
     select {
     case n = <-c1:
        fmt.Println("FIRST CASE")
     case n = <-c2:
        fmt.Println("SECOND CASE")
     case w <- n:
        fmt.Println("THIRD CASE")
     }
  }
}


go run xxx.go > out.txt

在out.txt能看到三种情况都有

0 回复 有任何疑惑可以回复我~
  • ccmouse #1
    但是送给worker的数据永远都是0。因为n:=0在for里面
    回复 有任何疑惑可以回复我~ 2020-10-10 18:51:26
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信