Select语句选择无数据

I'm writing a test in go that looks like the following example that is randomly passing or failing.

        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()
        }

The log shows that sometimes the out slice has empty elements appended to the end, could be any number, it's very random. The sending side it's sending what it's supposed to so I assume is because of the for loop and the select executing the branches after they have been read. Also probably worth to mention, the channels are all closed at the same time when the done channel is written to.