エクスポートされていないフィールドを持つ構造体を操作する場合、それらをバイナリ データにエンコードするのが困難な場合があります。エンコーディング/バイナリ パッケージは解決策を提供しますが、リフレクションに依存すると、エクスポートされていないフィールドに関する問題が発生する可能性があります。
代替ソリューション
この制限を克服するには、ゴブパッケージ。 gob パッケージは、プライベート フィールドを含むデータ構造をシリアル化および逆シリアル化するためのシンプルかつ効率的な方法を提供します。これを実装する方法は次のとおりです:
例
次のコード例を考えてみましょう:
package main import ( "bytes" "encoding/gob" "fmt" ) type Data struct { id int32 name [16]byte } func (d *Data) GobEncode() ([]byte, error) { w := new(bytes.Buffer) enc := gob.NewEncoder(w) err := enc.Encode(d.id) if err != nil { return nil, err } err = enc.Encode(d.name) if err != nil { return nil, err } return w.Bytes(), nil } func (d *Data) GobDecode(buf []byte) error { r := bytes.NewBuffer(buf) dec := gob.NewDecoder(r) err := dec.Decode(&d.id) if err != nil { return err } return dec.Decode(&d.name) } func main() { d := Data{id: 7} copy(d.name[:], []byte("tree")) buffer := new(bytes.Buffer) // Write enc := gob.NewEncoder(buffer) err := enc.Encode(d) if err != nil { fmt.Println("Encode error:", err) return } // Read buffer = bytes.NewBuffer(buffer.Bytes()) e := new(Data) dec := gob.NewDecoder(buffer) err = dec.Decode(e) if err != nil { fmt.Println("Decode error:", err) return } fmt.Println(e) }
このアプローチに従うことで、効果的にダンプと取得を行うことができます。リフレクションに依存せずに、エクスポートされていないフィールドを含むデータをバイト配列に構造体化します。
以上がエクスポートされていないフィールドを持つ構造体をリフレクションなしでバイト配列にシリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。