我有不明类型的小滴。有没有办法打印它以便在内部查看?
可能有gob.Debug
,但不适用于我
https://golang.org/src/encoding/gob/debug.go
使用DecodeValue
的Google搜索建议,但需要初始化reflect.Value
如果我得到未知的料滴,那么我将无法通过未知类型传递初始化值
https://play.golang.org/p/OWxX1kPJ6Qa
package main
import (
"bytes"
"encoding/gob"
"fmt"
"reflect"
)
func encode1() []byte {
x := "123"
buf := &bytes.Buffer{}
enc := gob.NewEncoder(buf)
err := enc.Encode(x)
if err != nil {
panic(err)
}
return buf.Bytes()
}
func decode1(b1 []byte) {
var x string
dec := gob.NewDecoder(bytes.NewBuffer(b1))
err := dec.Decode(&x)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", x)
}
func decode2(b1 []byte) {
// var x reflect.Value
x := reflect.New(reflect.TypeOf(""))
dec := gob.NewDecoder(bytes.NewBuffer(b1))
err := dec.DecodeValue(x)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", x)
fmt.Printf("%#v\n", reflect.Indirect(x))
}
func main() {
b1 := encode1()
decode1(b1)
decode2(b1)
}
答案 0 :(得分:1)
在编码解码之前,您需要Register类型
寄存器在下面记录一种类型,由该类型的值标识 其内部类型名称。该名称将标识 作为接口变量发送或接收的值。只有会 由于需要实现接口值的实现而被转移 注册。预期仅在初始化期间使用,它会慌乱 如果类型和名称之间的映射不是双射。