当前位置: > > > > 反序列化未知 Go 的 gob blob
反序列化未知 Go 的 gob blob
来源:stackoverflow
2024-04-27 20:09:34
0浏览
收藏
在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天米云就整理分享《反序列化未知 Go 的 gob blob》,聊聊,希望可以帮助到正在努力赚钱的你。
问题内容
我有一些未知类型的怪物。有办法打印出来查看里面吗?
可能有 gob.debug 但它对我不可用 https://golang.org/src/encoding/gob/debug.go
谷歌搜索建议使用 decodevalue 但它需要初始化 reflect.value 如果我得到未知的 gob blob,那么我无法传递未知类型的初始化值
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)
}
解决方案
在编码解码之前,您需要 您的类型
好了,本文到此结束,带大家了解了《反序列化未知 Go 的 gob blob》,希望本文对你有所帮助!关注米云公众号,给大家分享更多Golang知识!
