Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah saya mendapat ralat "gob: type not registered for interface: map[string]interface {}" dalam Go?

Mengapakah saya mendapat ralat "gob: type not registered for interface: map[string]interface {}" dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-11 09:29:03327semak imbas

Why do I get the

Ralat: "gob: type not registered for interface: map[string]interface {}"

Dalam Go, pakej gob menyediakan sokongan untuk pengekodan dan penyahkodan nilai ke dalam perwakilan binari. Walau bagaimanapun, apabila cuba mengekod nilai peta[rentetan]antaramuka{} menggunakan gob, anda mungkin menghadapi ralat:

gob: type not registered for interface: map[string]interface {}

Ralat ini menandakan bahawa pakej gob tidak mengetahui jenis peta[rentetan] antara muka{}. Untuk menyelesaikan isu ini, anda mesti mendaftarkan jenis secara eksplisit menggunakan fungsi gob.Register.

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

Dengan mendaftarkan jenis, anda memaklumkan pakej gob bahawa ia harus mengenali dan mengendalikan map[string]interface{ } nilai semasa operasi pengekodan dan penyahkodan.

Berikut ialah versi ubah suai kod yang anda berikan yang merangkumi pendaftaran yang diperlukan:

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)
    // Register the map[string]interface{} type for encoding
    gob.Register(map[string]interface{}{})
    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))
}

Selepas mendaftarkan jenis, anda boleh berjaya mengekod dan menyahkod peta nilai [rentetan]antara muka{} menggunakan gob.

Atas ialah kandungan terperinci Mengapakah saya mendapat ralat "gob: type not registered for interface: map[string]interface {}" 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