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 關注
- 121 瀏覽
添加回答
舉報