go websock发送json 接收json
时间: 2023-11-16 16:46:53 浏览: 30
发送JSON数据可以使用Go的`encoding/json`包来序列化数据并将其发送到WebSocket连接。
以下是示例代码:
```go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/gorilla/websocket"
)
type Message struct {
Text string `json:"text"`
}
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
func main() {
http.HandleFunc("/", handleWebSocket)
log.Fatal(http.ListenAndServe(":8080", nil))
}
func handleWebSocket(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println(err)
return
}
defer conn.Close()
message := Message{Text: "Hello, World!"}
jsonMessage, _ := json.Marshal(message)
err = conn.WriteMessage(websocket.TextMessage, jsonMessage)
if err != nil {
log.Println(err)
return
}
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
log.Println(err)
return
}
if messageType == websocket.TextMessage {
var message Message
err := json.Unmarshal(p, &message)
if err != nil {
log.Println(err)
continue
}
fmt.Printf("Received message: %s\n", message.Text)
}
}
}
```
该示例使用Gorilla WebSocket库来处理WebSocket连接。 `handleWebSocket`函数处理连接,并在连接建立后向客户端发送JSON消息。然后,它读取来自客户端的JSON消息并将其反序列化为`Message`类型。
要发送JSON数据,请使用`json.Marshal`将数据序列化为字节切片,然后使用`conn.WriteMessage`将其写入WebSocket连接。
要接收JSON数据,请使用`conn.ReadMessage`从WebSocket连接读取字节切片,然后使用`json.Unmarshal`将其反序列化为相应的类型。