【问题标题】:Listen one channel on multiple places in Go [duplicate]在 Go 的多个地方收听一个频道 [重复]
【发布时间】:2019-10-08 23:14:35
【问题描述】:

我知道一旦从一个通道获取数据,该数据将不会从该通道正在等待的任何其他地方接收数据。但是,如果我想设计一个节目广播,该频道有数据并且准备在不同的地方取出而不影响其他频道但在所有地方,我需要以相同的顺序接收数据,最好的设计是什么?

举个例子:

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

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

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

这里同时执行reciever1()reciver2() 应该得到相同的结果。

【问题讨论】:

  • 制作两个通道,每个接收器一个,并将相同的值发送到两个通道/接收器。

标签: go goroutine


【解决方案1】:

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

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
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2021-09-24
    相关资源
    最近更新 更多