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

在 go websocket 服务器上获取 json 数据

在 go websocket 服务器上获取 json 数据

Go
当年话下 2021-12-20 10:24:04
当我从 js 客户端发送socket.send('{"text":"111"}')并在服务器上获取它时websocket.JSON.Receive(ws, &data),数据保持为空。我使用“golang.org/x/net/websocket”type (    Msg struct {        clientKey string        text string    }    NewClientEvent struct {        clientKey string        msgChan chan *Msg    }    Item struct {        text string    })var (    clientRequests = make(chan *NewClientEvent, 100)    clientDisconnects = make(chan string, 100)    messages = make(chan *Msg, 100))func ChatServer(ws *websocket.Conn) {    msgChan := make(chan *Msg, 100)    clientKey := time.Now().String()    clientRequests <- &NewClientEvent{clientKey, msgChan}    defer func(){ clientDisconnects <- clientKey}()    go func(){        for msg := range msgChan{            ws.Write([]byte(msg.text))        }    }()    for {        var data Item        err := websocket.JSON.Receive(ws, &data)        if err != nil {            log.Println("Error: ", err.Error())            return        }        messages <- &Msg{clientKey, data.text}    }}但是,如果我尝试socket.send('"text"')通过以下方式发送并获取它:var data stringerr := websocket.JSON.Receive(ws, &data)            if err != nil {                log.Println("Error: ", err.Error())                return            }            messages <- &Msg{clientKey, data}一切正常。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可能需要先定义结构,然后才能JSON.receive在像这样的对象上使用


{ "text": "Hi" }


type socketData struct {

    Text string `json:"text"`

}

然后


data := &socketData{}


websocket.JSON.receive(ws, &data)


log.Println(data.Text) // Hi

如果您要发送无法真正为其定义结构的随机数据(尽管这是首选方式),您只需声明一个 interface{}


var data map[string]interface{}


log.Println(data["text"].(string)) // Hi

http://play.golang.org/p/Jp5qKtiUGw


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

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