当我从 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
- 1 回答
- 0 关注
- 349 浏览
添加回答
举报
0/150
提交
取消