gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:42:18 26 4
gpt4 key购买 nike

当我从 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 string
err := websocket.JSON.Receive(ws, &data)
if err != nil {
log.Println("Error: ", err.Error())
return
}
messages <- &Msg{clientKey, data}

一切正常。

最佳答案

在像

这样的对象上使用 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

关于json - 在 go websocket 服务器上获取 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com