Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekodkan `map[string]antara muka{}` dengan Gob?

Bagaimana untuk Mengekodkan `map[string]antara muka{}` dengan Gob?

Barbara Streisand
Barbara Streisandasal
2024-11-11 15:28:03740semak imbas

How to Encode a `map[string]interface{}` with Gob?

gob: Pengekodan peta[rentetan]antara muka{}

Dalam artikel ini, kami akan meneroka isu biasa yang dihadapi semasa menggunakan gob to mengekodkan jenis data peta[rentetan]antara muka{}. Apabila cuba mengekod peta sedemikian, pengguna mungkin menghadapi ralat "gob: type not registered for interface: map[string]interface {}."

Untuk menangani perkara ini, kami memperkenalkan penyelesaian mudah:

gob.Register(map[string]interface{}{})

Dengan mendaftarkan jenis peta[rentetan]antara muka{} dengan gob, kami membolehkan pengekod mengenali dan mengendalikan struktur data ini dengan betul semasa pengekodan proses.

Berikut ialah contoh kod dikemas kini yang menunjukkan cara mengekod dan menyahkod jenis peta[rentetan]antara muka{} menggunakan gob, selepas mendaftarkan jenis:

package main

import (
    "bytes"
    "encoding/gob"
    "encoding/json"
    "fmt"
    "log"
)

func CloneObject(a, b interface{}) []byte {
    buff := new(bytes.Buffer)
    enc := gob.NewEncoder(buff)
    dec := gob.NewDecoder(buff)
    enc.Encode(a)
    b1 := buff.Bytes()
    dec.Decode(b)
    return b1
}

func main() {
    var a interface{}
    a = map[string]interface{}{"X": 1}
    b2, err := json.Marshal(&a)
    fmt.Println(string(b2), err)

    gob.Register(map[string]interface{}{})

    var b interface{}
    b1 := CloneObject(&a, &b)
    fmt.Println(string(b1))
}

Dengan pendaftaran jenis gob , pengekodan dan penyahkodan nilai peta[rentetan]antaramuka{} akan berfungsi dengan lancar dan mesej ralat "gob: type not registered for interface: map[string]interface {}" tidak akan muncul lagi.

Atas ialah kandungan terperinci Bagaimana untuk Mengekodkan `map[string]antara muka{}` dengan Gob?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn