内容简介:除了众所周知的JSON和XML之外,Go还提供二进制格式
除了众所周知的JSON和XML之外,Go还提供二进制格式 gob
。本文将介绍如何使用 gob
包。
将对象序列化为二进制格式
Golang 版本
1.12.1
前沿
除了众所周知的JSON和XML之外,Go还提供二进制格式 gob
。本文将介绍如何使用 gob
包。
实现
package main import ( "bytes" "encoding/gob" "fmt" ) type User struct { FirstName string LastName string Age int Active bool } func (u User) String() string { return fmt.Sprintf(`{"FirstName":%s,"LastName":%s, "Age":%d,"Active":%v }`, u.FirstName, u.LastName, u.Age, u.Active) } type SimpleUser struct { FirstName string LastName string } func (u SimpleUser) String() string { return fmt.Sprintf(`{"FirstName":%s,"LastName":%s}`, u.FirstName, u.LastName) } func main() { var buff bytes.Buffer // Encode value enc := gob.NewEncoder(&buff) user := User{ "Radomir", "Sohlich", 30, true, } enc.Encode(user) fmt.Printf("%X\n", buff.Bytes()) // Decode value out := User{} dec := gob.NewDecoder(&buff) dec.Decode(&out) fmt.Println(out.String()) enc.Encode(user) out2 := SimpleUser{} dec.Decode(&out2) fmt.Println(out2.String()) }
$ go run main.go 40FF81030101045573657201FF82000104010946697273744E616D65010C0001084C6173744E616D65010C0001034167650104000106416374697665010200000019FF8201075261646F6D69720107536F686C696368013C010100 {"FirstName":Radomir,"LastName":Sohlich,"Age":30,"Active":true } {"FirstName":Radomir,"LastName":Sohlich}
原理
gob
序列化和反序列化需要编码器和解码器。 gob.NewEncoder
函数使用底层 Writer
创建 Encoder
。 每次调用 Encode
方法都会将对象序列化为 gob
格式。 gob格式本身就是自描述的二进制格式。 这意味着每个序列化结构前面都有其描述。
要解码序列化形式的数据,必须通过使用底层 Reader
调用 gob.NewDecoder
来创建解码器。 然后, Decode
接受指向该反序列化数据的结构指针。
请注意,gob格式不需要源和目标类型完全匹配。 有关规则,请参阅 encoding/gob
包。
以上所述就是小编给大家介绍的《go基础库之将对象序列化为二进制格式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员的数学思维修炼(趣味解读)
周颖 / 清华大学出版社 / 2014-4-1 / 45.00元
本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识。本书门槛不高,不需要读者精通很多高深的数学知识,只需要读者具备基本的四则运算、乘方等数学基础知识和日常生活中的基本逻辑判断能力即可。本书拒绝枯燥乏味的讲解,而是代之以轻松活泼的风格。书中列举了大量读者都很熟悉,而且非常有趣的数学实例,并结合程序设计的思维和算法加以剖析,可以训练读者的数学思维能力和程序设计能力,进而拓宽读者的视野,......一起来看看 《程序员的数学思维修炼(趣味解读)》 这本书的介绍吧!