2 回答
TA贡献1788条经验 获得超4个赞
假设我为五个交易品种启动 5 个数据流,现在我只想停止其中一个流。这就引出了一个问题:
如何跟踪所有这些止损通道?
我是否可以使用带有符号键控的集合,拉动 stopC 通道,然后发出信号来结束该数据流?
如何从停止函数实际写入 stopC 通道?
同样,我不认为这特别困难,只是我无法从文档中弄清楚,所以任何帮助将不胜感激。
谢谢
TA贡献1854条经验 获得超8个赞
事实证明,只需保存&关闭频道即可解决所有问题。我真的很惊讶这是多么容易,但这是更新函数的代码:
func startDataStream(symbol, interval string, wsKlineHandler futures.WsKlineHandler, errHandler futures.ErrHandler) (err error) {
_, stopC, err := futures.WsKlineServe(symbol, interval, wsKlineHandler, errHandler)
if err != nil {
fmt.Println(err)
return err
}
// just save the stop channel
chanMap[symbol] = stopC
return nil
}
然后,停止函数真的变得令人尴尬:
func stopDataStream(symbol string) {
stopC := chanMap[symbol] // load the stop channel for the symbol
close(stopC) // just close it.
}
最后,测试一下:
var (
chanMap map[string]chan struct{}
)
func runWSDataTest() {
chanMap = make(map[string]chan struct{})
symbol := "BTCUSDT"
interval := "15m"
errHandler := func(err error) { fmt.Println(err) }
wsKlineHandler := getKLineHandler()
println("Start stream")
_ = startDataStream(symbol, interval, wsKlineHandler, errHandler)
time.Sleep(3 * time.Second)
println("Stop stream")
stopDataStream(symbol)
time.Sleep(1 * time.Second)
}
就是这样。
- 2 回答
- 0 关注
- 90 浏览
添加回答
举报