В Unix select используется для ожидания более чем одного источника ввода. Выбор ждет, пока один источник входного сигнала не станет готовым.
Как это сделать в Go?
Я нашел Выбирать в Go, но это выглядит как тонкая оболочка вокруг функции Unix, потому что она работает с файловыми дескрипторами.
Как дождаться более одного соединения, в частности соединений UnixConn, используемых для сокетов домена Unix?
@CeriseLimón Мне нужны данные от двух соединений в одной функции. Как сумматор: прочитать a из соединения 1, b из соединения 2 и вернуть a+b. Функция не должна заботиться о том, какое значение придет первым, а должна дождаться, пока будут прочитаны оба значения.
Тогда вам даже не нужен выбор, просто прочитайте оба, например. из двух горутин и объединить через один канал и получить.

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
}
}
}
Ясно, select — это синтаксис в Go. Я искал функцию.
Запустите горутину для чтения из каждого соединения.