오류: "gob: 인터페이스에 유형이 등록되지 않았습니다: map[string]interface {}"
Go에서 gob 패키지는 다음을 제공합니다. 값을 이진 표현으로 인코딩 및 디코딩하는 기능을 지원합니다. 그러나 gob을 사용하여 map[string]interface{} 값을 인코딩하려고 하면 오류가 발생할 수 있습니다.
gob: type not registered for interface: map[string]interface {}
이 오류는 gob 패키지가 map[string] 유형을 인식하지 못함을 나타냅니다. 인터페이스{}. 이 문제를 해결하려면 gob.Register 함수를 사용하여 유형을 명시적으로 등록해야 합니다.
gob.Register(map[string]interface{}{})
유형을 등록하면 gob 패키지에 map[string]인터페이스를 인식하고 처리해야 함을 알리는 것입니다. } 값을 인코딩 및 디코딩합니다.
다음은 필요한 등록을 포함하여 제공한 코드의 수정된 버전입니다.
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)) }
유형을 등록한 후 성공적으로 인코딩 및 디코딩할 수 있습니다. gob를 사용하는 map[string]interface{} 값.
위 내용은 Go에서 'gob: 인터페이스에 등록되지 않은 유형: map[string]인터페이스 {}' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!