¿Cómo vuelco la estructura en la matriz de bytes sin reflexión?
Ya encontrécodificación / binario paquete para tratar con él, pero dependía dereflejar paquete, por lo que no funcionó con campos de estructura no capitalizados (es decir, no exportados). Sin embargo, pasé una semana para encontrar el problema, todavía tengo una pregunta: si los campos de estructura no deberían exportarse, ¿cómo los vuelco fácilmente en datos binarios?
EDITAR: Aquí está el ejemplo. Si escribe con mayúscula el nombre de los campos deData
estructura, que funciona correctamente. PeroData
La intención de struct era ser de tipo abstracto, por lo que no quiero exportar estos 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)
}