select

来源:11-4 用select进行调度

五栋一哥

2020-03-26

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

写回答

2回答

ccmouse

2020-03-28

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

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

0
3
五栋一哥
懂了,打错了。。。
2020-03-28
共3条回复

慕侠5029079

2020-10-10

但是我把内容输出的时候,是有进入其他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
1
ccmouse
但是送给worker的数据永远都是0。因为n:=0在for里面
2020-10-10
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程