我该如何收集golang协程里面的值

业务场景:

有A,B,C,D,E 五个协程来并行抓取ws数据, 抓取后的结果result 是:int64类型的值,已知ws的数据推送很快.

现在需要按照A,B,C,D,E的五个result, 来汇总做计算,评率为每隔n秒

我自己ugly的伪代码:
A.go

var aresult int64

func AgetResult(){
    for {
        // read ws
        data := ws.read()
        // parse result
        aresult = parse(data)
    }
}

B.go

var bresult int64

func BgetResult(){
        for {
        // read ws
        data := ws.read()
        // parse result
        bresult = parse(data)
    }
}

如此类推, 然后利用ticker每隔n秒,来拿各个全局变量来汇总计算

但是感觉这种逻辑真的很ugly, 所以想问下更好的思路?

阅读 3k
3 个回答

golang 里有个东西叫 channel ……

var result = make(chan int,5)
for i := 0 ; i < 5 ; i ++ {
    go func() {
        val := getResult()
        result <- val
    }
}
var sum = 0 
for val := range result {
    sum += val
}

print(sum)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题