go - 在 Go 中的多个位置收听一个 channel

标签 go goroutine

<分区>

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

举个例子:

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

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

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

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

最佳答案

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

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
    }


}

关于go - 在 Go 中的多个位置收听一个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56257268/

相关文章:

docker - 使用默认docker文件构建beego docker镜像时,报错: `godep: No Godeps found (or in any parent directory)`

go - const if 语句是否与 Go 中的 #ifdef 宏做同样的事情?

go - 只返回golang中多个返回值的第一个结果

xml - 如何在 go 中解码 xml 枚举属性?

go - 使用Ticker的Goroutine选择循环导致CPU达到100%

http - ListenAndServe 返回 net.DNSError "nodename nor servname provided"

go - “Go Concurrency Patterns: Timing out, moving on”博客中的非阻塞 channel

go - 为什么所有的 goroutines 都在 sleep ?

go - 为什么在使用 select 并顺序将值输入 2 个 channel 时所有 goroutine 都处于休眠状态?

parallel-processing - goroutines 在多核处理器上的表现如何