Pengekodan peta[rentetan]antara muka{} dengan Gob
Dalam Go, pakej gob menyediakan format bersiri untuk pengekodan dan penyahkodan nilai Go . Walau bagaimanapun, ia menghadapi cabaran apabila berurusan dengan jenis antara muka, termasuk jenis peta[rentetan]antara muka{}.
Apabila cuba mengekod peta[rentetan]antaramuka{} menggunakan gob, ralat berikut berlaku:
gob: type not registered for interface: map[string]interface {}
Ralat ini menunjukkan bahawa gob tidak tahu cara mensirikan jenis peta[rentetan]antara muka{} kerana ia tidak didaftarkan dengan pakej gob. Untuk menyelesaikan isu ini dan berjaya mengekod jenis ini, kita mesti mendaftarkannya dengan gob menggunakan baris berikut:
gob.Register(map[string]interface{}{})
Ini memberitahu gob cara mensiri dan menyahsiri peta dengan kunci rentetan dan nilai jenis arbitrari.
Berikut ialah contoh diubah suai yang menggabungkan pendaftaran ini:
package main import ( "bytes" "encoding/gob" "encoding/json" "fmt" "log" ) func CloneObject(a, b interface{}) []byte { gob.Register(map[string]interface{}{}) buff := new(bytes.Buffer) enc := gob.NewEncoder(buff) dec := gob.NewDecoder(buff) err := enc.Encode(a) if err != nil { log.Panic("e1: ", err) } b1 := buff.Bytes() err = dec.Decode(b) if err != nil { log.Panic("e2: ", err) } return b1 } func main() { var a interface{} a = map[string]interface{}{"X": 1} b2, err := json.Marshal(&a) fmt.Println(string(b2), err) var b interface{} b1 := CloneObject(&a, &b) fmt.Println(string(b1)) }
Dengan mendaftarkan jenis peta[rentetan]antaramuka{}, program ini kini boleh berjaya mengekod dan menyahkod jenis ini menggunakan pakej gob.
Atas ialah kandungan terperinci Bagaimana untuk Mengekod dan Menyahkod `map[rentetan]antara muka{}` dengan Gob dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!