package gobridge import ( "encoding/binary" "encoding/json" "fmt" "io" "net" ) // writeMsg 将消息以 [4字节长度][JSON载荷] 格式写入连接 func writeMsg(conn net.Conn, msg Message) error { data, err := json.Marshal(msg) if err != nil { return fmt.Errorf("marshal message: %w", err) } header := make([]byte, 4) binary.BigEndian.PutUint32(header, uint32(len(data))) _, err = conn.Write(append(header, data...)) return err } // readMsg 从连接中读取一条消息 func readMsg(conn net.Conn) (Message, error) { header := make([]byte, 4) if _, err := io.ReadFull(conn, header); err != nil { return Message{}, fmt.Errorf("read header: %w", err) } length := binary.BigEndian.Uint32(header) body := make([]byte, length) if _, err := io.ReadFull(conn, body); err != nil { return Message{}, fmt.Errorf("read body: %w", err) } var msg Message if err := json.Unmarshal(body, &msg); err != nil { return Message{}, fmt.Errorf("unmarshal message: %w", err) } return msg, nil }