Gob으로 map[string]interface{} 인코딩
Go에서 gob 패키지는 Go 값을 인코딩하고 디코딩하기 위한 직렬화 형식을 제공합니다. . 그러나 map[string]interface{} 유형을 포함한 인터페이스 유형을 처리할 때 문제에 직면합니다.
gob을 사용하여 map[string]interface{}를 인코딩하려고 하면 다음 오류가 발생합니다.
gob: type not registered for interface: map[string]interface {}
이 오류는 gob이 gob 패키지에 등록되지 않았기 때문에 map[string]interface{} 유형을 직렬화하는 방법을 모른다는 것을 나타냅니다. 이 문제를 해결하고 이 유형을 성공적으로 인코딩하려면 다음 행을 사용하여 이를 gob에 등록해야 합니다.
gob.Register(map[string]interface{}{})
이는 문자열 키와 임의 유형의 값을 사용하여 맵을 직렬화 및 역직렬화하는 방법을 gob에 알려줍니다.
다음은 이 등록을 통합한 수정된 예입니다.
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)) }
map[string]interface{} 유형을 등록함으로써 이 프로그램은 이제 gob 패키지를 사용하여 이 유형을 성공적으로 인코딩 및 디코딩할 수 있습니다.
위 내용은 Go에서 Gob을 사용하여 `map[string]interface{}`를 인코딩하고 디코딩하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!