将数据连续发送到多个通道

时间:2018-05-21 19:11:39

标签: go channel goroutine

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

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只接收来自第一次基于循环的数据。因此,似乎正在发生的是,在读取第一个通道之前,所有后续通道都会阻止发送数据。我该如何纠正这个?

1 个答案:

答案 0 :(得分:0)

使用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
}()