go - 如何在 Golang 中订阅多个 channel

标签 go

它使用 golang 的 channel 。 以下代码如何使st2正常显示:

package main

import (
   "fmt"
   "github.com/OpinionatedGeek/go-bittrex"
)

func main() {
 bt := bittrex.New("", "")
 ch := make(chan bittrex.ExchangeState, 16)
 go func() {
    for st := range ch1 {
        fmt.Println("Message:", st)
    }
    for st2 := range ch2 {
        fmt.Println("Message:", st2)
    }
}()

bt1.SubscribeExchangeUpdate("BTC-NEO", ch1, nil)
bt2.SubscribeExchangeUpdate("BTC-ETC", ch2, nil)

这里的问题是: 它只有 BTC-NEO 工作。看起来 BTC-ETC 只是被忽略了。 如何同时订阅?

引用链接位于: https://github.com/OpinionatedGeek/go-bittrex/blob/master/ws.go

最佳答案

您可以使用 select 语句在单个 gouroutine 中等待多个 channel :https://play.golang.com/p/1PUfSyG0HHZ

更多链接:

https://tour.golang.org/concurrency/5

https://golang.org/ref/spec#Select_statements

关于go - 如何在 Golang 中订阅多个 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49237092/

相关文章:

go - 为什么 goroutines 比其他语言的线程便宜很多?

go - 如何调整用于下载 N 个文件的 goroutine 数量?

mongodb - 如何在 golang 和 mongodb 中通过 id 查找

arrays - Go语言中的数组比较

mongodb - 维护 mgo session 的最佳实践

Golang - 根据地址计算字段索引

go - 如何使用 HTML 和 CSS 设置 Go 错误的样式?

go - 为什么在使用 vendor 目录中的依赖项与 gopath 中的依赖项构建时,go 应用程序二进制文件的大小不同?

go - 使用 Websockets 向客户端广播服务器端消息

go - strings.Split() 似乎在 [] 处逃脱并继续前进(没有错误)