- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有未知类型的采空区。有没有办法打印出来在里面查看?
可能有 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)
}
最佳答案
你需要Register编码解码前的类型
Register records a type, identified by a value for that type, under its internal type name. That name will identify the concrete type of a value sent or received as an interface variable. Only types that will be transferred as implementations of interface values need to be registered. Expecting to be used only during initialization, it panics if the mapping between types and names is not a bijection.
关于go - 反序列化未知的 Go 的 gob blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467734/
我正在使用“RPUSH”命令将我的对象推送到我的 redis 库中。 // object is of type interface var network bytes.Buffer gob.NewEn
这个问题在这里已经有了答案: Unable to decode gob data (1 个回答) 关闭 4 年前。 这是我的 Playground ,我正在尝试序列化结构列表并从文件中读回。 htt
在我的 Go 程序中,我用 gob 编码 []byte 数据 buf := new(bytes.Buffer) enc := gob.NewEncoder(buf) //dat
我想开发一个 type data struct 来实现磁盘存储。我在将数据对象编码为字节时遇到了问题。对于编码,我想使用 encoding/gob 包。 package data import (
我正在尝试将结构保存到 gob,但文件缺少嵌套类型的值。我可以自己保存 Matrix 类型,但 Network 结构的 gob 数据不包括 Matrix 值。有没有办法将这个嵌套结构保存到 gob 中
我在我的代码中做这样的事情 test1 = make(map[string]interface{}) test2 = make(map[string]interface{}) test3 = make
我有一个正在编码的简单结构类型。但是,我在解码数据时犯了根本性的错误。每次我尝试对其进行解码时,都会出现 EOF panic 错误。 //将 map 编码为gob。将 gob 保存到磁盘。从磁盘读取
我最近重组了我的代码,现在 main 包下有两个包:chain 和 api。 在 chain 中,我定义了一些结构 SomeStruct1、SomeStruct2 和这些结构的接口(interface
我正在尝试实现一个基于接口(interface)的消息队列,其中将作业作为字节推送到 Redis 队列。但是我在尝试解码字节流时不断收到 EOF 错误。 https://play.golang.org
我正在尝试将 []byte 通过 chan 提供给 gob 解码器。它可以工作,但起初解码器会抛出一大堆 EOF 错误,然后停止。当它停止抛出错误时,程序的行为与我预期的完全一样,它解码 gob 并正
我有一个非常非常大的 map 阵列(不是 slice ),然后我试图对其进行编码。我真的需要避免复制数组,但我不知道该怎么做。 到目前为止,我有这个: func doSomething() { va
我正在尝试将 gob 编码的数据保存在磁盘上的一个文件中,作为一个简单的数据存储。但是,当我下次打开它时,gob 编码器会忽略文件中已有的任何数据,并在发送数据之前重新发送已发送格式的定义。看到 go
我遇到了 gob 协议(protocol)问题(或者可能是一般的网络问题,我的知识薄弱),我不明白为什么下面的代码不能正常工作。它只是一个维护开放 TCP 连接并通过它发送多个 gob 的简单示例。该
这似乎无法正常工作,我不确定自己做错了什么。我正在尝试将 map 转换为 gob,对二进制文件进行 gzip 压缩并将其保存到文件中,然后再读回。 type Object struct { mystr
我们能否期望两个 Go 对象 x, y 使得 x 等于 y(假设接口(interface)和映射没有技巧,只是结构和数组)gob_encode(x) 和 gob_encode(y) 的输出将始终是一样
我已经阅读了 ( gob) 的文档,但我遇到了一些问题: 现在我知道如何像这样编码结构和解码了: func main() { s1 := &S{ Field1: "Hello
当我尝试使用 gob 编码器将类型为 map[mapKey]string 的 map 保存到文件中时,它没有将字符串保存到文件中。 这里的mapKey是struct,map value是长json字符
我主要使用 Python,但也在玩 Go。我写了下面的代码来做一些在 python 中非常简单的事情,我希望它也可以在 Go 中完成。 package main import ( "bytes
我有一个包含未导出字段的结构,应该进行 gob 编码和解码。 说: type A struct { s int } func (a *A) Inc() { a.s++ } 显然,在这种
是否可以使用 Gob 编码将结构串联附加到同一文件中?它适用于写作,但是当我不止一次地使用解码器阅读时,我遇到了: extra data in buffer 所以我首先想知道这是否可行,或者我是否应该
我是一名优秀的程序员,十分优秀!