在我了解 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
}
将多个值写入流可以提高效率,因为有关每种编码类型的信息都会写入流一次。
- 1 回答
- 0 关注
- 190 浏览
添加回答
举报
0/150
提交
取消