如何在 Go 中 select?

How to select in Go?

在Unix中select用于等待多个输入源。 Select 等到一个输入源准备就绪。

如何在 Go 中执行此操作?

我在 Go 中发现了一个 Select 但这接缝是 Unix 函数的薄包装,因为它适用于文件描述符。

如何等待多个连接,特别是用于 Unix 域套接字的 UnixConn 个连接?

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