是否可以可靠地顺序写入两个单独的通道?

If I have a select on two channels:

for {
    select {
    case <-chan1:
        // do something
    case <-chan2:
        // do something else
    }
}

And in a separate goroutine I write sequentially to those channels:

chan1 <- "blah"
chan2 <- true

Am I guaranteed to see "do something" execute before "do something else"?

I know that select chooses randomly if it has two unblocked channels, but I was thinking that writing to the first channel might reliably "interrupt" the writing goroutine if the select is already blocking, implying that the select would run on the unblocked first channel before the second write.

Yes you can rely on this if the channels are unbuffered. See the Go Memory Model.