Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Membuang Structs dengan Medan Tidak Dieksport ke dalam Tatasusunan Byte dalam Go tanpa Refleksi?
Melambakkan Struct ke dalam Array Byte tanpa Refleksi
Persoalannya berpunca daripada isu yang dihadapi apabila menggunakan pengekodan/pakej binari untuk membuang struct ke dalam bait tatasusunan. Memandangkan pakej bergantung pada refleksi, ia gagal mengendalikan medan struct yang tidak dieksport (tidak bermodal). Kebimbangan timbul daripada percubaan untuk mengekalkan abstraksi struct data tertentu.
Penyelesaian
Untuk membuang struct dengan medan yang tidak dieksport ke dalam tatasusunan bait tanpa refleksi, pertimbangkan untuk menggunakan gob pakej. Pakej ini menyediakan keupayaan bersiri dan penyahserilan yang cekap dan bebas platform. Dengan melaksanakan antara muka GobEncoder dan GobDecoder untuk struct dengan medan yang tidak dieksport, anda boleh mensiri dan menyahsiri kandungannya dengan berkesan.
Di bawah ialah contoh yang menunjukkan penggunaan pakej gob:
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) }
Oleh melaksanakan antara muka ini, anda boleh bersiri dan menyahsiri medan struct yang tidak dieksport tanpa perlu untuk refleksi, memastikan lambakan data struct yang betul ke dalam tatasusunan bait.
Atas ialah kandungan terperinci Bagaimana untuk Membuang Structs dengan Medan Tidak Dieksport ke dalam Tatasusunan Byte dalam Go tanpa Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!