反序列化未知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)
}