Struktur ohne Reflexion in Byte-Array ausgeben
Die Frage ergibt sich aus einem Problem, das bei der Verwendung des Codierungs-/Binärpakets zum Speichern von Strukturen in Byte auftritt Arrays. Da das Paket auf Reflektion basiert, kann es nicht exportierte (nicht großgeschriebene) Strukturfelder nicht verarbeiten. Die Sorge ergibt sich aus dem Versuch, die Abstraktion bestimmter Datenstrukturen aufrechtzuerhalten.
Lösung
Um Strukturen mit nicht exportierten Feldern ohne Reflektion in Byte-Arrays abzulegen, sollten Sie den Einsatz des Gob in Betracht ziehen Paket. Dieses Paket bietet effiziente und plattformunabhängige Serialisierungs- und Deserialisierungsfunktionen. Durch die Implementierung der GobEncoder- und GobDecoder-Schnittstellen für Strukturen mit nicht exportierten Feldern können Sie deren Inhalte effektiv serialisieren und deserialisieren.
Unten ist ein Beispiel, das die Verwendung des gob-Pakets demonstriert:
package main import ( "bytes" "encoding/gob" "fmt" "log" ) type Data struct { id int32 name [16]byte } func (d *Data) GobEncode() ([]byte, error) { w := new(bytes.Buffer) encoder := gob.NewEncoder(w) err := encoder.Encode(d.id) if err != nil { return nil, err } err = encoder.Encode(d.name) if err != nil { return nil, err } return w.Bytes(), nil } func (d *Data) GobDecode(buf []byte) error { r := bytes.NewBuffer(buf) decoder := gob.NewDecoder(r) err := decoder.Decode(&d.id) if err != nil { return err } return decoder.Decode(&d.name) } func main() { d := Data{id: 7} copy(d.name[:], []byte("tree")) buffer := new(bytes.Buffer) // Writing enc := gob.NewEncoder(buffer) err := enc.Encode(d) if err != nil { log.Fatal("encode error:", err) } // Reading buffer = bytes.NewBuffer(buffer.Bytes()) e := new(Data) dec := gob.NewDecoder(buffer) err = dec.Decode(e) fmt.Println(e, err) }
Von Durch die Implementierung dieser Schnittstellen können Sie nicht exportierte Strukturfelder serialisieren und deserialisieren, ohne dass eine Reflexion erforderlich ist, und so das ordnungsgemäße Dumping sicherstellen Daten in Byte-Arrays strukturieren.
Das obige ist der detaillierte Inhalt vonWie speichere ich Strukturen mit nicht exportierten Feldern ohne Reflection in Byte-Arrays in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!