Как выбрать в Go? - PullRequest
       59

Как выбрать в Go?

0 голосов
/ 26 марта 2019

В Unix select используется для ожидания более одного входного источника.Select ждет, пока один входной источник не станет готовым.

Как это сделать в Go?

Я нашел Select в Go, но это выглядит как тонкая оболочка вокругФункция Unix, потому что она работает с файловыми дескрипторами.

Как ожидать более одного соединения, в частности UnixConn соединений, используемых для доменных сокетов Unix?

1 Ответ

1 голос
/ 26 марта 2019
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
        }
    }
}
...