gob是谷歌自己的序列化工具,只能在go语言中使用。常用的场景就是RPC传输数据。
闲话少说直接上代码:
package main
import (
"encoding/gob"
"bytes"
"log"
"fmt"
)
type User struct{
Id int32
Name string
Address string//属性必须是大写开头,
}
type Student struct{
Id int32
Name string
}
func main(){
u:=User{1,"nxin","beijing"}
buf:=new(bytes.Buffer)//分配内存
fmt.Println(buf)
enc:=gob.NewEncoder(buf)//创建基于buf内存的编码器
err:=enc.Encode(u)//编码器对结构体编码
if err!=nil{
log.Fatal(err)
}
fmt.Println(buf.Bytes())
us:=User{}
bu:=bytes.NewBuffer(buf.Bytes())//使用buf里面的数据创建初始化buffer
des:=gob.NewDecoder(bu)//创建bu的解码器
des.Decode(&us)//对buf内容解码,并将解码后的数据写入us的内存中
fmt.Println(us)
st:=Student{}
bus:=bytes.NewBuffer(buf.Bytes())//使用buf里面的数据创建初始化buffer
dess:=gob.NewDecoder(bus)//创建bu的解码器
dess.Decode(&st)//对buf内容解码,并将解码后的数据写入us的内存中
fmt.Println(st)
}
关于gob本人总结了一些需要注意的地方:
1,结构体中的属性必须大写开头。不然无法序列化
2,序列化的struct与反序列化的struct结构可以不一样。只会匹配属性相同的数据。