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

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

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

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

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

Запустите горутину для чтения из каждого соединения.

Bayta Darell 26.03.2019 17:44

@CeriseLimón Мне нужны данные от двух соединений в одной функции. Как сумматор: прочитать a из соединения 1, b из соединения 2 и вернуть a+b. Функция не должна заботиться о том, какое значение придет первым, а должна дождаться, пока будут прочитаны оба значения.

ceving 26.03.2019 17:52

Тогда вам даже не нужен выбор, просто прочитайте оба, например. из двух горутин и объединить через один канал и получить.

Volker 26.03.2019 21:34
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
2
3
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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. Я искал функцию.

ceving 27.03.2019 08:46

Другие вопросы по теме