消息的序列化与反序列化
扫描二维码
随时随地手机看文章
1、定义:
- 序列化:将数据结构或对象转换为可传输或存储的格式(如二进制流、JSON 字符串)。
- 反序列化:将序列化后的数据还原为原始数据结构或对象。
2、核心作用
- 跨网络传输:将对象转换为字节流,便于网络传输。
- 跨语言交互:通过统一格式(如 Protobuf)实现多语言兼容。
- 持久化存储:将对象保存到文件或数据库。
3、消息序列化与反序列化的核心优点
二进制协议压缩数据体积,提升网络传输效率,降低带宽消耗;统一数据格式(如 JSON/Protobuf),实现多语言系统无缝交互;支持将对象转换为可存储格式(如文件、数据库),便于长期保存和恢复;Schema 定义支持字段增删,保障版本向前/向后兼容;结构化数据格式减少注入攻击风险,结合校验机制提升安全性。
4、序列化与反序列化在go语言中的使用
在Go语言中,gob和json是两种常见的数据序列化和反序列化方式,用于将Go语言中的数据结构转换为字节流或字符串,以便存储或传输,同时也可以将字节流或字符串还原为Go语言中的数据结构
-
gob
gob是Go语言标准库中的一个包,专门用于序列化和反序列化Go语言的数据结构。它主要用于Go语言内部的数据传输,例如网络通信或文件存储。
-
特点
gob是为Go语言设计的,对Go语言的数据结构支持非常好,序列化和反序列化速度较快;gob在序列化时会保留类型信息,因此在反序列化时可以还原为原始类型;gob格式是Go语言特有的,不适合与其他语言交互。
-
json
json是JavaScript Object Notation的缩写,是一种轻量级的数据交换格式,广泛用于各种编程语言之间的数据传输。
-
特点
json格式被广泛支持,几乎所有的编程语言都有相应的库来处理json数据;;json格式的文本可读性较好,便于调试和查看;json支持多种数据类型,包括对象、数组、字符串、数字、布尔值等。使用建议
- 只需要在Go语言内部进行数据传输,且对性能要求较高,推荐使用gob。
- 需要与其他语言交互,或者需要将数据存储为可读的文本格式,推荐使用json数据格式
5、简单示例
// 序列化
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
user := User{Name: "Alice", Age: 30}
data, _ := json.Marshal(user) // 输出: {"name":"Alice","age":30}
// 反序列化
var newUser User
json.Unmarshal(data, &newUser)
fmt.Println(newUser.Name) // 输出: Alice