2014-02-21 6 views
16

gob nicht map[string]interface{}gob: Typ nicht registriert für die Schnittstelle: map [string] Schnittstelle {}

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

http://play.golang.org/p/Si4hd8I0JE

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) 
    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)) 
} 

Ist es möglich, kodieren, zu kodieren map[string]interface{} in gob? Ich bin in der Lage, es mit JSON

Antwort

8

zu codieren Wahrscheinlich ja, aber Sie müssen Ihren Typ vorher registrieren. Siehe http://golang.org/pkg/encoding/gob/#Register.

Die Details werden in http://golang.org/pkg/encoding/gob/#hdr-Encoding_Details

dokumentiert (es wirklich :-)

im Go Dokumentation suchen hilft
+0

Google gibt nur zwei Seiten. Diese Seite und gehen Sie Quellcode: https://www.google.com.ua/search?q=gob%3A+type+nicht+registrierte+für+interface%3A+map%5Bstring%5Dinterface+%7B%7D&oq=gob % 3A + Typ + nicht + registriert + für + Schnittstelle% 3A + Karte% 5Bstring% 5Dchnittstelle +% 7B% 7D & aqs = chrom..69i57j69i58 & sourceid = chrome & espv = 210 & es_sm = 93 & ie = UTF-8 # q =% 22gob: + typ + nicht + registriert + für + schnittstelle: + karte% 5Bstring% 5Dinterface +% 7B% 7D% 22 – Artem

Verwandte Themen