猿问

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

在我了解 gob 如何工作的雄心壮志中。我有几个问题。


我知道 gob 序列化了一个 go 类型,比如 struct map 或 interface(我们必须注册它的真实类型)但是:


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 为零,则该值将被丢弃。请专家向我解释,我一整天都心烦意乱,什么也没找到


PIPIONE
浏览 191回答 1
1回答

呼如林

自从输入这个答案后,我了解到 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 Verr := e.Decode(&v1)if err != nil {   // handle error}var v2 Verr := e.Decode(&v2)if err != nil {  // handle error}将多个值写入流可以提高效率,因为有关每种编码类型的信息都会写入流一次。
随时随地看视频慕课网APP

相关分类

Go
我要回答