小编kro*_*sse的帖子

如何在没有反射的情况下将结构转储到字节数组中?

我已经找到了编码/二进制包来处理它,但它依赖于反射包,所以它不适用于非大写(即未导出)的struct字段.然而,我花了一个星期才发现问题,我仍然有一个问题:如果不应该导出struct字段,我如何将它们轻松转储到二进制数据中?

编辑:这是一个例子.如果您将Datastruct 字段的名称大写,那么它可以正常工作.但是Datastruct本来是一个抽象类型,所以我不想导出这些字段.

package main
import (
    "fmt"
    "encoding/binary"
    "bytes"
)

type Data struct {
    id int32
    name [16]byte
}


func main() {
    d := Data{Id: 1}
    copy(d.Name[:], []byte("tree"))
    buffer := new(bytes.Buffer)
    binary.Write(buffer, binary.LittleEndian, d)
    // d was written properly
    fmt.Println(buffer.Bytes())
    // try to read...
    buffer = bytes.NewBuffer(buffer.Bytes())
    var e = new(Data)
    err := binary.Read(buffer, binary.LittleEndian, e)
    fmt.Println(e, err)
}
Run Code Online (Sandbox Code Playgroud)

binary struct structure bytearray go

21
推荐指数
1
解决办法
1万
查看次数

标签 统计

binary ×1

bytearray ×1

go ×1

struct ×1

structure ×1