反序列化未知Go';s形气泡
我有不明类型的啤酒。有没有办法把它打印出来看里面 可能有反序列化未知Go';s形气泡,go,serialization,reflection,gob,reflect,Go,Serialization,Reflection,Gob,Reflect,我有不明类型的啤酒。有没有办法把它打印出来看里面 可能有gob.Debug,但它对我不可用 谷歌建议使用DecodeValue,但需要初始化reflect.Value 若我得到未知的gob blob,那个么我不能传递未知类型的初始化值 您需要在编码和解码之前输入您的类型 Register在下面记录由该类型的值标识的类型 它的内部类型名。该名称将标识一个对象的具体类型 作为接口变量发送或接收的值。只有将 当接口值的实现需要 注册的。由于只希望在初始化过程中使用,因此会出现恐慌 如果类型和名称之
gob.Debug
,但它对我不可用
谷歌建议使用DecodeValue
,但需要初始化reflect.Value
若我得到未知的gob blob,那个么我不能传递未知类型的初始化值
您需要在编码和解码之前输入您的类型
Register在下面记录由该类型的值标识的类型
它的内部类型名。该名称将标识一个对象的具体类型
作为接口变量发送或接收的值。只有将
当接口值的实现需要
注册的。由于只希望在初始化过程中使用,因此会出现恐慌
如果类型和名称之间的映射不是双射
但我没有序列化结构。实际上,我正在寻找工具,将列出字段名称,类型,值。如果我使用十六进制查看器,那么就有可能猜到一些东西。关于字段名和类型的信息就在这里,这完全是另一个问题。你只需要在反射包中我用gob编码blob。我无法在某个对象或结构中反序列化它,以便使用reflect进行资源管理。
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)
}