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

时间:2015-09-23 04:07:52

标签: go gob

我的目标是了解采空区的运作方式。我有几个问题。

我知道gob序列化类似结构图或界面的go类型(我们必须注册它的真实类型)但是:

func (dec *Decoder) Decode(e interface{}) error
Decode 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是nil,则该值将被丢弃。请专家向我解释我整天都很沮丧,并且没有找到任何内容

1 个答案:

答案 0 :(得分:5)

自从进入这个答案后,我了解到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
}

此代码从stream 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
}

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