Mengapa Gob membuang 'gob: type not registered for interface: map[string]interface {}' apabila mengekod peta[string]interface{}?

Susan Sarandon
Lepaskan: 2024-11-19 13:06:03
asal
935 orang telah melayarinya

Why does Gob throw

gob: Pengekodan Peta dengan Antara Muka

Apabila cuba mengekod peta[rentetan]antaramuka{} menggunakan Gob, pengguna mungkin menghadapi ralat mesej: "gob: type not registered for interface: map[string]interface {}." Ralat ini berlaku kerana Gob memerlukan jenis data yang dikodkan didaftarkan sebelum ia boleh diproses.

Penyelesaian untuk masalah ini adalah mudah: daftarkan jenis dengan Gob menggunakan fungsi gob.Register. Dalam kes ini, kod berikut harus ditambahkan pada program:

gob.Register(map[string]interface{}{})
Salin selepas log masuk

Langkah pendaftaran ini memaklumkan Gob bahawa ia sepatutnya dapat mengekod dan menyahkod peta dengan kunci rentetan dan nilai antara muka.

Untuk menunjukkan perkara ini, pertimbangkan kod yang disemak berikut:

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))
}
Salin selepas log masuk

Kini, apabila kod ini dijalankan, pengekod Gob akan berjaya mengekod peta[rentetan]antara muka{} ke dalam tatasusunan bait. Mesej ralat tidak akan dipaparkan lagi.

Atas ialah kandungan terperinci Mengapa Gob membuang 'gob: type not registered for interface: map[string]interface {}' apabila mengekod peta[string]interface{}?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan