消息的序列化与反序列化

2025-05-21


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



推荐