Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengekod Medan Struktur Tidak Dieksport ke dalam Tatasusunan Byte dalam Go Tanpa Menggunakan Refleksi?
Mengekodkan Struktur ke dalam Tatasusunan Byte Tanpa Refleksi
Cabaran yang anda hadapi ialah ketidakupayaan untuk membuang data ke dalam tatasusunan bait menggunakan penyelesaian berasaskan pantulan apabila berurusan dengan medan struct yang tidak dieksport. Untuk menyelesaikan masalah ini, mari kita teroka pendekatan alternatif menggunakan pakej gob.
Memanfaatkan Pakej Gob
Pakej gob menyediakan mekanisme untuk mensiri dan menyahsiri struktur data sewenang-wenang dalam cara yang bebas platform dan cekap. Untuk mendayakan fungsi ini untuk struct dengan medan yang tidak dieksport, anda boleh melaksanakan antara muka GobDecoder dan GobEncoder.
Melaksanakan Pensiri Tersuai
Untuk medan yang tidak dieksport untuk disertakan dalam proses penyirian , struct anda perlu melaksanakan perkara berikut fungsi:
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 }
Contoh Pelaksanaan
Di bawah ialah contoh pelaksanaan menggunakan pakej gob untuk mensiri dan menyahsiri struct dengan medan yang tidak dieksport:
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) }
Pendekatan ini mengelakkan penggunaan pantulan dan membolehkan pensirilan yang cekap dan penyahserikatan struktur yang mengandungi kedua-dua medan yang dieksport dan tidak dieksport.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekod Medan Struktur Tidak Dieksport ke dalam Tatasusunan Byte dalam Go Tanpa Menggunakan Refleksi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!