Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mensiri Struktur dengan Medan Tidak Dieksport ke dalam Tatasusunan Byte tanpa Refleksi?
Apabila bekerja dengan struct yang mempunyai medan yang tidak dieksport, pengekodannya ke dalam data binari boleh menjadi satu cabaran. Walaupun pengekodan/pakej binari menawarkan penyelesaian, pergantungannya pada refleksi boleh membawa kepada isu dengan medan yang tidak dieksport.
Penyelesaian Alternatif
Untuk mengatasi had ini, pertimbangkan untuk menggunakan pakej gob. Pakej gob menyediakan cara yang mudah dan cekap untuk mensiri dan menyahsiri struktur data, walaupun yang mempunyai medan peribadi. Begini cara anda boleh melaksanakannya:
Contoh
Pertimbangkan contoh kod berikut:
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) }
Dengan mengikuti pendekatan ini, anda boleh membuang dan mendapatkan semula dengan berkesan data struct dengan medan yang tidak dieksport ke dalam tatasusunan bait tanpa bergantung pada pantulan.
Atas ialah kandungan terperinci Bagaimana untuk Mensiri Struktur dengan Medan Tidak Dieksport ke dalam Tatasusunan Byte tanpa Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!