Golang:处理二进制数据

时间:2016-12-25 02:56:36

标签: javascript go websocket

我有应用程序客户端(javascript)-server(golang),它们之间的连接遍布websocket。我正在使用二进制消息进行规划,我想创建自己的消息协议,就像在此页protocol中一样。

我已经通过使用DataView而不是golang在javascript中弄明白了。事件原始数据类型与int8,uint8,int16,uint16等类似,我无法弄清楚。

这是消息框架:

1      Uint8      opcode
2      Uint16     msg

这是javascript代码处理来自上面的消息帧的websocket表单的示例:

websocket.onmessage = function(evt) {
    var data = new DataView(evt.data);
    var opcode = data.getUint8(0);
    var msg = data.getUint16(1);
}

你能告诉我如何在golang中做到吗?我正在使用gorilla websocket。我知道阅读邮件在[]byte,但我不知道如何将其剪切为javascript与DataView一样。

由于

1 个答案:

答案 0 :(得分:0)

对于uint16,您需要二进制包。仔细检查LittleEndian是否符合您的要求。

package main

import (
    "encoding/binary"
)

func main() {
    a := []byte("yak")

    /* opcode  */ _ = uint8(a[0])
    /* message */ _ = binary.LittleEndian.Uint16(a[1:3])
}

https://play.golang.org/p/HRu7C5h2a5