为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Golang 从 websocket 读取值

如何使用 Golang 从 websocket 读取值

Go
慕姐4208626 2022-06-27 16:50:10
我是 Go 新手,我正在连接到股票交易 Websocket,我的响应日志如下所示 map[data:[map[p:111.95 s:AAPL t:1.599838531053e+12 v:1]] type:trade] 如何访问内部值?我的代码看起来像    var msg interface{}    // map[data:[ DATA ] type:trade]    //DATA === map[p:117.18 s:AAPL t:1.599684492829e+12 v:200]    for {        err := w.ReadJSON(&msg)        if err != nil {            panic(err)        }        fmt.Println(msg)    }示例 JSON{ "data":[{"p":7296.89,"s":"BINANCE:BTCUSDT","t":1575526691134,"v":0.011467}], "type":"trade" }如果我添加map[string]到接口,我可以通过做访问数据切片msg["data"],但是当我msg["data"][0]访问切片时,我得到一个编译器错误。我是菜鸟,所以如果这是一个愚蠢的问题,我深表歉意
查看完整描述

1 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

正如问题评论所建议的,声明一个匹配 JSON 文档结构的 Go 类型:


type Message struct {

    Data []struct {

        P float64 `json:"p"`

        S string  `json:"s"`

        T int64   `json:"t"`

        V float64 `json:"v"`

    } `json:"data"`

    Type string `json:"type"`

}

解组为该类型的值:


for {

    var msg Message

    err := w.ReadJSON(&msg)

    if err != nil {

        panic(err)

    }

    fmt.Println(msg)

}

使用选择器和索引表达式访问字段:


fmt.Println(msg.Data[0])


查看完整回答
反对 回复 2022-06-27
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信