我正在尋找乾淨的方式將字節數組轉換爲客戶機 - 服務器應用程序的結構體。 我知道大多數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)
}
但是,只要數字字節與結構的大小不一致,那麼就會發出恐慌。我怎麼能修改此無需恐慌工作,如果過小或過大的
你只是控制服務器端,意味着你已經有串行協議。你有什麼協議,是你問題的關鍵。 golang擁有對廣泛使用的協議(如JSON,BSON或PROTOBUF)的編碼包支持。因此找出串行協議並選擇編碼包。或者如果您有私人協議,請自行實施編碼。 –
這是私人協議。任何示例/文章/ goplayground? – user642318