连续向多个通道发送数据

Send data to multiple channels in succession

我有以下情况:每分钟调用一次的函数,每次调用它时都会尝试将数据发送到多个定义的通道。

var chan1 = make(chan bool)
var chan2 = make(chan bool)
var chan3 = make(chan bool)

go func() {
 for {
  <-time.After(1* time.Minute)
  chan1 <- true
  chan2 <- false
  chan3 <- true
 }
}()

然后在三个单独的 go 例程中,每个通道都通过 select 读取,就像这样。

go func() {
 var myVar bool

 select {
   case <- chan1: //or chan2, chan3 etc...
     myVar = true
   default:
     myVar = false
}()

问题只是 chan1 从第一个基于时间的循环接收数据。因此,似乎正在发生的是,在读取第一个通道之前,所有后续通道的数据发送都被阻止。我该如何纠正?

使用 buffered channel:

var chan1 = make(chan bool, 1)
var chan2 = make(chan bool, 1)
var chan3 = make(chan bool, 1)

或运行发送asynchronously:

go func() {
    chan1 <- true
}()