我正在将币安API集成到现有系统中,虽然大多数部分都是直截了当的,但数据流API击中了我对go-routines的有限理解。我不认为币安的golang SDK中有什么特别之处,但本质上我只需要两个函数,一个函数启动数据流并使用作为参数给出的事件处理程序处理事件,另一个函数结束数据流而不会实际关闭客户端,因为它将关闭所有其他连接。在之前的一个项目中,有两种消息类型,但币安 SDK 使用一个实现,该实现返回两个 go 通道,一个用于错误,另一个用于停止数据 stram,我猜从名称中可以。
我为启动数据流编写的代码如下所示:
func startDataStream(symbol, interval string, wsKlineHandler futures.WsKlineHandler, errHandler futures.ErrHandler) (err error){
doneC, stopC, err := futures.WsKlineServe(symbol, interval, wsKlineHandler, errHandler)
if err != nil {
fmt.Println(err)
return err
}
return nil
}
这按预期工作并流式传输数据。一个简单的测试来验证它:
func runWSDataTest() {
symbol := "BTCUSDT"
interval := "15m"
errHandler := func(err error) {fmt.Println(err)}
wsKlineHandler := func(event *futures.WsKlineEvent) {fmt.Println(event)}
_ = startDataStream(symbol, interval, wsKlineHandler, errHandler)
}
对我来说不太清楚的事情,主要是由于不完全理解,真的是我如何停止流。我认为返回的 stopC 通道可用于以某种方式发出类似于系统级 sigterm 的结束单句,然后流应该结束。
比如说,我有一个停止数据流函数,它采用一个符号作为参数
func stopDataStream(symbol){
}
尚方宝剑之说
哔哔one
相关分类