为了账号安全,请及时绑定邮箱和手机立即绑定

试图了解 Go gob 编码器的工作原理

试图了解 Go gob 编码器的工作原理

Go
PIPIONE 2021-11-08 18:09:14
在我了解 gob 如何工作的雄心壮志中。我有几个问题。我知道 gob 序列化了一个 go 类型,比如 struct map 或 interface(我们必须注册它的真实类型)但是:func (dec *Decoder) Decode(e interface{}) errorDecode reads the next value from the input stream and stores it in the data represented by the       empty interface value.If e is nil, the value will be discarded. Otherwise, the value underlying e must be a pointer to the correct type for the next data item received.If the input is at EOF, Decode returns io.EOF and does not modify e.我对本文档一无所知。它们是什么意思(从输入流中读取下一个值)它们是我们可以发送的一种数据,它是一个结构体或一个映射,但不是很多。它们的意思是如果 e 为零,则该值将被丢弃。请专家向我解释,我一整天都心烦意乱,什么也没找到
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

自从输入这个答案后,我了解到 OP 正在欺骗我们。停止喂食巨魔。


您可以将多个值写入一个流。您可以从一个流中读取多个值。


此代码将两个值写入输出流 w,一个 io.Writer:


e := gob.NewEncoder(w)

err := e.Encode(v1)

if err != nil {

   // handle error

}

err := e.Encode(v2)

if err != nil {

  // handle error

}

此代码从流 r 读取值,这是一个 io.Reader。每次调用 Decode 都会读取一个由调用 Decode 写入的值。


d := gob.NewDecoder(r)

var v1 V

err := e.Decode(&v1)

if err != nil {

   // handle error

}

var v2 V

err := e.Decode(&v2)

if err != nil {

  // handle error

}

将多个值写入流可以提高效率,因为有关每种编码类型的信息都会写入流一次。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信