298-gob包序列化与反序列化








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}








 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值