【发布时间】:2015-07-21 01:50:09
【问题描述】:
我正在寻找将字节数组转换为客户端-服务器应用程序结构的干净方法。 我知道大多数人会为此解决方案转向 gob 包,但是我不控制应用程序的编码。话虽如此,我只编写了服务器应用程序而不是客户端,正在交换的协议有一个相互合同。
我能得出的最好的结果如下。
type T struct {
A int16
B int8
C []byte
}
func main() {
// Create a struct and write it.
t := T{A: 99, B: 10}
buf := &bytes.Buffer{}
buf1 := []byte{5, 100, 100}
fmt.Println(buf1)
buf.Write(buf1)
//err := binary.Write(buf, binary.BigEndian, t)
//if err != nil {
// panic(err)
//}
fmt.Println(buf)
// Read into an empty struct.
t = T{}
err := binary.Read(buf, binary.BigEndian, &t)
if err != nil {
panic(err)
}
fmt.Printf("%d %d", t.A, t.B)
}
但是,一旦数字字节与结构的大小不一致,go 就会发送一个恐慌。如果尺寸过小或过大,我如何修改它以使其正常工作而不会出现恐慌
【问题讨论】:
-
你只是控制服务器端,意味着你已经有了串口协议。你有什么协议,是你问题的关键。 golang 为广泛使用的协议提供编码包支持,如 JSON、BSON 或 PROTOBUF。所以找出串口协议并选择编码包。或者如果您有私有协议,请自己实现编码。
-
是私有协议。有没有例子/文章/goplayground?