首页 > 解决方案 > 选择语句选择没有数据

问题描述

我正在编写一个类似于以下示例的测试,随机通过或失败。

        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 在读取分支后执行它们。还可能值得一提的是,当写入完成的通道时,通道都将同时关闭。

标签: go

解决方案


推荐阅读