Select语句选择无数据

时间:2018-09-06 04:13:44

标签: go

我正在用go编写一个测试,看起来像下面的示例,该示例随机通过或失败。

        t1 := make(chan []byte)
        t2 := make(chan []byte)
        done := make(chan bool)
        DoStuff(t1, t2, done)
        out := [][]byte{}
L:
        for {
                select {
                case d := <-t1:
                        out = append(out, d)
                case d := <-t2:
                        out = append(out, d)
                case <-done:
                        break L
                }
        }
        t.Logf("%s", out)
        if len(out) != expectedLength {
                t.Fail()
        }

日志显示,有时out切片的末尾附加了空元素,可以是任何数字,这是非常随机的。发送方发送的是应该发送的内容,所以我认为这是因为for循环和select在读取分支后执行了分支。还可能值得一提的是,在将完成的通道写入其中时,通道会同时关闭。

0 个答案:

没有答案