如何在 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
}
}
}
在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
}
}
}