如何在Go中选择?

In Unix select is used to wait for more than one input source. Select waits until one input source becomes ready.

How to do this in Go?

I found a Select in Go but this seams to be a thin wrapper around the Unix function, because it works on file descriptors.

How to wait for more than one connection, in particular UnixConn connections used for Unix Domain Sockets?

package main

import (
    "fmt"
)

type Message struct {
    Payload int
}

func main() {
    var inA *Message
    var inB *Message

    rxA := make(chan *Message)
    rxB := make(chan *Message)

    go func(txA chan *Message){
      txA <- &Message{Payload: 1} 
    }(rxA)

    go func(txB chan *Message){
      txB <- &Message{Payload: 2} 
    }(rxB)

    for {
        select {
            case inA = <- rxA:
            case inB = <- rxB:
        }
        if inA != nil && inB != nil {
            fmt.Println(inA.Payload + inB.Payload)
            break
        }
    }
}