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)
}

questionAnswers(1)

yourAnswerToTheQuestion