Como despejo a estrutura na matriz de bytes sem reflexão?
Eu já encontreicodificação / binário pacote para lidar com isso, mas isso dependiarefletir pacote por isso não funcionou com campos struct não capitalizados (isto é, não exportados). No entanto, eu passei uma semana para encontrar esse problema, eu ainda tenho uma pergunta: se os campos de struct não devem ser exportados, como faço para despejá-los facilmente em dados binários?
EDITAR: Aqui está o exemplo. Se você capitalizar o nome dos campos deData
struct, que funciona corretamente. MasData
struct foi planejado para ser um tipo abstrato, então não quero exportar esses campos.
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)
}