我正在寻找干净的方式将字节数组转换为客户机 - 服务器应用程序的结构体。 我知道大多数ppl转向采用这种解决方案的gob包,但是我不控制应用程序的编码。这就是说,我只编写服务器应用程序而不是客户端,有一个正在交换的协议的相互协议。golang将字节数组转换为结构体
我可以出来的最好的是以下。
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)
}
但是,只要数字字节与结构的大小不一致,那么就会发出恐慌。我怎么能修改此无需恐慌工作,如果过小或过大的
2015-07-21 user642318
你只是控制服务器端,意味着你已经有串行协议。你有什么协议,是你问题的关键。 golang拥有对广泛使用的协议(如JSON,BSON或PROTOBUF)的编码包支持。因此找出串行协议并选择编码包。或者如果您有私人协议,请自行实施编码。 –
这是私人协议。任何示例/文章/ goplayground? –