Encodage des structures dans des tableaux d'octets sans réflexion
Le défi auquel vous avez été confronté est l'incapacité de vider les données dans des tableaux d'octets à l'aide de solutions basées sur la réflexion lorsque traiter les champs de structure non exportés. Pour résoudre ce problème, explorons une approche alternative utilisant le package gob.
Exploiter le package Gob
Le package gob fournit un mécanisme pour sérialiser et désérialiser des structures de données arbitraires dans de manière efficace et indépendante de la plateforme. Pour activer cette fonctionnalité pour les structures avec des champs non exportés, vous pouvez implémenter les interfaces GobDecoder et GobEncoder.
Implémentation de la sérialisation personnalisée
Pour que les champs non exportés soient inclus dans le processus de sérialisation , votre structure doit implémenter ce qui suit fonctions :
func (d *Data) GobEncode() ([]byte, error) { // Perform custom encoding for unexported fields } func (d *Data) GobDecode(buf []byte) error { // Perform custom decoding for unexported fields }
Exemple d'implémentation
Vous trouverez ci-dessous un exemple d'implémentation utilisant le package gob pour sérialiser et désérialiser une structure avec des champs non exportés :
package main import ( "bytes" "encoding/gob" "log" ) type Data struct { id int32 name [16]byte } func main() { d := Data{id: 7} copy(d.name[:], []byte("tree")) // Writing buffer := new(bytes.Buffer) 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) // Inspect the deserialized struct fmt.Println(e, err) }
Cette approche évite l'utilisation de la réflexion et permet une sérialisation et une désérialisation efficaces des structures contenant à la fois des éléments exportés et non exportés. champs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!