Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Mengekodkan `map[rentetan]antaramuka{}` dengan Gob dalam Go?
Dalam Go, pakej gob digunakan secara meluas untuk pengekodan dan penyahkodan struktur data. Walau bagaimanapun, anda mungkin menghadapi ralat seperti "gob: type not registered for interface: map[string]interface {}" apabila cuba mengekod peta dengan kekunci rentetan dan nilai antara muka{}.
Untuk menyelesaikan isu ini , adalah perlu untuk mendaftarkan jenis peta[rentetan]antara muka{} dengan pakej gob. Dengan berbuat demikian, gob akan memperoleh keupayaan untuk mengenali dan mengendalikan struktur data ini.
Untuk mendaftarkan map[string]interface{} type , gunakan fungsi gob.Register:
gob.Register(map[string]interface{}{})
Barisan ini menambah jenis peta[rentetan]antara muka{} pada senarai jenis yang diketahui yang boleh dikendalikan oleh gob.
Pertimbangkan coretan kod berikut:
package main import ( "bytes" "encoding/gob" "encoding/json" "fmt" "log" ) func main() { // Register the map[string]interface{} type gob.Register(map[string]interface{}{}) 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)) } func CloneObject(a, b interface{}) []byte { 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 }
Dalam contoh ini, kami telah memasukkan gob.Register(map[string]interface{}{}) pada permulaan fungsi utama untuk mendaftarkan peta Jenis [rentetan]antara muka{}. Akibatnya, operasi pengekodan dan penyahkodan gob seterusnya akan berfungsi tanpa menghadapi ralat "jenis tidak didaftarkan".
Atas ialah kandungan terperinci Bagaimana untuk Mengekodkan `map[rentetan]antaramuka{}` dengan Gob dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!