Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengekodkan `map[rentetan]antaramuka{}` dengan Gob dalam Go?

Bagaimana untuk Mengekodkan `map[rentetan]antaramuka{}` dengan Gob dalam Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-12 10:28:02372semak imbas

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

Pengekodan peta[rentetan]antara muka{} dengan gob

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.

Mendaftarkan Map[string]interface{} Type

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.

Contoh

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!

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