Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengekod dan Menyahkod `map[rentetan]antara muka{}` dengan Gob dalam Go?

Bagaimana untuk Mengekod dan Menyahkod `map[rentetan]antara muka{}` dengan Gob dalam Go?

DDD
Lepaskan: 2024-11-12 06:34:02
asal
762 orang telah melayarinya

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

Pengekodan peta[rentetan]antara muka{} dengan Gob

Dalam Go, pakej gob menyediakan format bersiri untuk pengekodan dan penyahkodan nilai Go . Walau bagaimanapun, ia menghadapi cabaran apabila berurusan dengan jenis antara muka, termasuk jenis peta[rentetan]antara muka{}.

Apabila cuba mengekod peta[rentetan]antaramuka{} menggunakan gob, ralat berikut berlaku:

gob: type not registered for interface: map[string]interface {}
Salin selepas log masuk

Ralat ini menunjukkan bahawa gob tidak tahu cara mensirikan jenis peta[rentetan]antara muka{} kerana ia tidak didaftarkan dengan pakej gob. Untuk menyelesaikan isu ini dan berjaya mengekod jenis ini, kita mesti mendaftarkannya dengan gob menggunakan baris berikut:

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

Ini memberitahu gob cara mensiri dan menyahsiri peta dengan kunci rentetan dan nilai jenis arbitrari.

Berikut ialah contoh diubah suai yang menggabungkan pendaftaran ini:

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

Dengan mendaftarkan jenis peta[rentetan]antaramuka{}, program ini kini boleh berjaya mengekod dan menyahkod jenis ini menggunakan pakej gob.

Atas ialah kandungan terperinci Bagaimana untuk Mengekod dan Menyahkod `map[rentetan]antara muka{}` dengan Gob dalam Go?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan