go基础库之将对象序列化为二进制格式

栏目: 编程语言 · XML · 发布时间: 6年前

内容简介:除了众所周知的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基础库之将对象序列化为二进制格式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

马云:未来已来

马云:未来已来

阿里巴巴集团 / 红旗出版社 / 2017-4-1 / CNY 49.00

阿里巴巴集团:全球主要的互联网公司之一,由马云带领其他17个创始人,于1999年在中国杭州创立。阿里巴巴集团经营多元化的互联网业务,以“让天下没有难做的生意”为使命,致力于为创业者和消费者提供全球化的商业平台,打造开放、协同、繁荣的电子商务生态系统。自成立以来,阿里巴巴集团建立了领先的消费者电子商务、网上支付、B2B网上交易市场及云计算业务,并积极开拓无线应用、手机操作系统和互联网电视等领域。一起来看看 《马云:未来已来》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具