我的目标是了解采空区的运作方式。我有几个问题。
我知道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,则该值将被丢弃。请专家向我解释我整天都很沮丧,并且没有找到任何内容
答案 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
}
将多个值写入流可以提高效率,因为有关每个编码类型的信息会一次写入流中。