如果你在用 Go 写交易系统、监控工具或市场数据采集模块,很可能会遇到通过 WebSocket 实时获取外汇行情的需求。下面是一份实用的接入教程,使用的是
提供的实时行情 API。本文以 EURUSD 的 1 分钟 K 线为例。
第一步:准备工作
确保你已安装 Go 环境,并获取了 API Key(可在官网免费申请)。
安装 WebSocket 客户端库:
go get nhooyr.io/websocket
我们使用的是 nhooyr.io/websocket,它轻量、现代、支持上下文控制。
第二步:建立连接
WebSocket 地址如下:
wss://data.infoway.io/ws?business=forex&apikey=YourAPIKey
你需要在地址中替换为你自己的 API key。
连接代码:
conn, _, err := websocket.Dial(ctx, url, nil)
if err != nil {
log.Fatalf("WebSocket连接失败: %v", err)
}
defer conn.Close(websocket.StatusNormalClosure, "关闭连接")
第三步:发送订阅消息
你需要发送一条初始化消息,告诉服务器你要订阅哪个品种、哪种周期的 K 线。例如,订阅 EURUSD 的 1 分钟 K 线:
initMsg := map[string]interface{}{
"code": 10004,
"trace": "your-trace-id", // 可使用uuid
"data": map[string]interface{}{
"arr": []map[string]interface{}{
{
"type": 1,
"codes": "EURUSD",
},
},
},
}
msgBytes, _ := json.Marshal(initMsg)
conn.Write(ctx, websocket.MessageText, msgBytes)
第四步:设置心跳 Ping
WebSocket 连接需要保持活跃状态,推荐每 30 秒发送一次 ping:
go func() {
ticker := time.NewTicker(30 * time.Second)
defer ticker.Stop()
for range ticker.C {
pingMsg := map[string]interface{}{
"code": 10010,
"trace": "your-trace-id",
}
pingBytes, _ := json.Marshal(pingMsg)
conn.Write(ctx, websocket.MessageText, pingBytes)
}
}()
第五步:接收行情数据
WebSocket 会持续推送行情数据。你只需监听并处理消息:
for {
_, msg, err := conn.Read(ctx)
if err != nil {
log.Printf("读取消息失败: %v", err)
break
}
fmt.Printf("收到消息: %s\n", string(msg))
}
收到的 JSON 格式数据包含开盘价、最高价、最低价、收盘价、时间戳等字段。
常见问题
连接失败:检查 API key 是否正确,网络是否支持 WebSocket。
收不到数据:确认订阅的品种代码无误,例如 EURUSD,并确保服务器返回了确认消息。
连接断开:可能是长时间无 Ping 消息,确保 Ping 机制正确运行。
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦