首页 文章

Golang:处理二进制数据

提问于
浏览
1

我有应用程序客户端(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

    对于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

相关问题