Go 结构体和字节数组之间的转换
问:如何在 Go 中在结构体和字节数组之间执行类似 C 的类型转换?例如,如何将接收到的网络字节流直接映射到结构体?
A:encoding/binary 包提供了比 unsafe.Pointer 更方便、更安全的替代方案:
<code class="go">// Create a struct and write it. type T struct { A uint32 B float64 } t := T{A: 0xEEFFEEFF, B: 3.14} buf := &bytes.Buffer{} err := binary.Write(buf, binary.BigEndian, t) if err != nil { panic(err) } fmt.Println(buf.Bytes()) // Read into an empty struct. t = T{} err = binary.Read(buf, binary.BigEndian, &t) if err != nil { panic(err) } fmt.Printf("%x %f", t.A, t.B)</code>
通过利用二进制包,您可以以更安全、更简洁的方式轻松在结构体和字节数组之间进行转换,自动处理大小和字节序。
以上是如何在 Go 中将结构体转换为字节数组,反之亦然?的详细内容。更多信息请关注PHP中文网其他相关文章!