gob包序列化
我们来利用gob包来进行
序列化 和
反序列化
来写点代码
func main() {
person := Person{"Alice", 20}
var buffer bytes.Buffer
encoder := gob.NewEncoder(&buffer)
err := encoder.Encode(&person)
if err != nil {
panic(err)
}
fmt.Printf("%x\n", buffer.Bytes())
}
type Person struct {
Name string
Age int
}
注意这里Person的属性
要开头大写
Name和Age
否则会报错
panic: gob: type main.Person has no exported fields
也就是Person没有可导出的属性
因为小写的话
是私有的
外部包是不能访问的
然后我们再试一下反序列化
var buffer2 bytes.Buffer
var person2 Person
buffer2.Write(buffer.Bytes())
//创建解码器
decoder := gob.NewDecoder(&buffer2)
//用解码器进行解码
err = decoder.Decode(&person2)
if err!=nil{
panic(err)
}
fmt.Println(person2)
我们看下完整代码
func main() {
person := Person{"Alice", 20}
var buffer bytes.Buffer
encoder := gob.NewEncoder(&buffer)
err := encoder.Encode(&person)
if err != nil {
panic(err)
}
fmt.Printf("%x\n", buffer.Bytes())
var buffer2 bytes.Buffer
var person2 Person
buffer2.Write(buffer.Bytes())
//创建解码器
decoder := gob.NewDecoder(&buffer2)
//用解码器进行解码
err = decoder.Decode(&person2)
if err != nil {
panic(err)
}
fmt.Println(person2)
}
type Person struct {
Name string
Age int
}
然后看下输出结果
25ff8103010106506572736f6e01ff8200010201044e616d65010c00010341676501040000000cff820105416c696365012800
{Alice 20}