在Go中的多个地方收听一个频道

时间:2019-05-22 12:52:54

标签: go goroutine

我知道,一旦从某个渠道获取数据,该渠道正在等待的其他任何地方都不会收到数据。但是,如果我要设计一个频道广播的节目,并且该频道可以在不影响其他频道的情况下在不同地方播放,但是在所有地方,我都需要以相同的顺序接收数据,那么最佳的设计是什么?

例如:

func sender(c chan int){
c-> 5
}

func reciever1(c chan int){
 i:= <-c
...
}

func reciever2(c chan int){
 i:= <-c
...
}

在同时执行reciever1()reciver2()时都应得到相同的结果。

1 个答案:

答案 0 :(得分:0)

您必须创建多个通道,并将相同的值传递给每个通道。 例子

package main
import (
    "fmt"
)

func main(){
    chann1 := make(chan int)
    chann2 := make(chan int)
    go func(){
        for {
            val :=<- chann1
            fmt.Println("GORoutine 1", val)
        }

    }()
    go func(){
        for {
            val :=<- chann2
            fmt.Println("GORoutine 2", val)
        }

    }()

    for i:=0;i<=10;i++{
        chann1 <- i
        chann2 <- i
    }


}