新闻中心

Golang如何使用encoding/gob进行对象序列化_Golang gob对象序列化实践

2025-11-19
浏览次数:
返回列表
Golang的gob包提供高效二进制序列化,适用于Go间数据交换。1. 结构体字段需大写才能被序列化;2. 使用gob.NewEncoder将对象编码到文件;3. 用gob.NewDecoder从文件恢复对象;4. 含接口时须调用gob.Register注册类型,如gob.Register(Dog{})。

golang如何使用encoding/gob进行对象序列化_golang gob对象序列化实践

Golang 的 encoding/gob 包提供了一种高效、原生的对象序列化方式,适用于 Go 程序之间的数据交换。与 JSON 或 XML 不同,gob 是 Go 特有的二进制格式,性能更高,但不具备跨语言兼容性。下面介绍如何在实际项目中使用 gob 进行对象序列化与反序列化。

定义可序列化的结构体

要使用 gob,结构体字段必须是可导出的(即首字母大写),且类型需支持 gob 编码。私有字段或不支持的类型将被忽略。

示例:

type Person struct {
    Name string
    Age  int
    City string
}

该结构体可以直接用于 gob 编码。注意:如果字段前有小写字母(如 name),则不会被序列化。

将对象编码为 gob 并保存到文件

使用 gob.NewEncoder 将对象写入文件或网络流。

  • 打开一个文件用于写入
  • 创建 gob 编码器
  • 调用 Encode 方法写入对象
代码示例:

file, _ := os.Create("person.gob")
defer file.Close()

encoder := gob.NewEncoder(file)
person := Person{Name: "Alice", Age: 30, City: "Beijing"}
err := encoder.Encode(person)
if err != nil {
    log.Fatal("Encode error:", err)
}

从 gob 文件恢复对象

使用 gob.NewDecoder 从文件读取并恢复原始对象。

小云雀 小云雀

剪映出品的AI视频和图片创作助手

小云雀 1949 查看详情 小云雀

  • 打开之前保存的 gob 文件
  • 创建解码器
  • 调用 Decode 方法填充目标变量
代码示例:

file, _ := os.Open("person.gob")
defer file.Close()

var person Person
decoder := gob.NewDecoder(file)
err := decoder.Decode(&person)
if err != nil {
    log.Fatal("Decode error:", err)
}
fmt.Printf("Recovered: %+v\n", person)

注册自定义类型(如有指针或接口)

如果结构体包含接口类型或使用了指针指向实现了接口的类型,需要提前调用 gob.Register 注册具体类型。

例如:

type Animal interface {
    Speak() string
}

type Dog struct{}

func (d Dog) Speak() string { return "Woof" }

// 序列化包含接口的结构
type Owner struct {
    Pet Animal
}

// 必须注册具体类型
gob.Register(Dog{})

否则在编解码时会报错:类型未注册。

基本上就这些。gob 使用简单,适合服务内部通信或持久化存储。只要注意字段导出、类型注册和错误处理,就能稳定使用。不复杂但容易忽略细节。

以上就是Golang如何使用encoding/gob进行对象序列化_Golang gob对象序列化实践的详细内容,更多请关注其它相关文章!


# 就能  # 抖音优化seo企业  # 遵义网站优化方案  # seo面试难不难  # seo标题优化思维导图  # 门户网站优化地址  # 网站建设具体流程图  # 卫生棉条营销推广活动  # 六安网站推广靠谱吗  # 金华市网络推广营销公司  # 哈尔滨seo找哪家  # 相关文章  # 如有  # 如何在  # js  # 资源管理  # 数据交换  # 适用于  # 如何使用  # 加载  # 序列化  # speak  # red  # 持久化存储  # 编码  # golang  # go  # json 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  Win10文件资源管理器“此电脑”分组怎么关 Win10恢复经典视图【技巧】  126邮箱网页版官方入口 126邮箱账号在线登录平台  MAC如何将整个网页截长图_MAC使用Safari的导出为PDF或第三方工具  抖音怎么赚钱_抖音创作者变现方法与途径指南  我的世界官方游戏入口 我的世界官网平台直达链接  为什么简单的XML文件也会解析失败? 检查隐藏的非打印字符(如BOM)的方法  解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误  在React函数组件中利用原生HTML5进行邮箱地址验证  Tailwind CSS line-clamp 布局问题解析与修复指南  深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量  将JSON对象数组转置为键值对列表的实用指南  Win11文件资源管理器卡顿怎么修 Win11重置资源管理器进程优化响应速度【修复方法】  快手官方唯一登录入口 谨防山寨钓鱼网站  现代化 SciPy 一维插值:interp1d 的替代方案与最佳实践  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  Spring Boot嵌入式服务器与J*a EE:功能支持深度解析  离线运行Go语言之旅:本地部署与GOPATH配置指南  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  Python模块化编程:有效管理依赖与避免循环引用  J*aScript生成器_j*ascript异步迭代  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  微信群消息显示延迟如何解决 微信群消息刷新优化方法  CSS布局中意外空白:解决padding-top导致的顶部间距问题  Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性  快手赚钱渠道_快手收益来源  拼多多购物车商品数量无法修改如何处理 拼多多购物车操作优化方法  C++ map遍历方法大全_C++ map迭代器使用总结  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  c++如何实现单例设计模式_c++线程安全的单例模式写法  Golang如何实现Web文件静态资源服务器_Golang静态资源服务器开发与实践  汽车之家官方网站官网入口_汽车之家网页版直接进入  2026春节假期时间安排 2026春节假日查询  抖音商城签到领现金是真的吗_抖音商城签到奖励与提现说明  抖音极速版最新版本 抖音极速版官方下载地址  Django表单验证失败时保留用户输入数据的最佳实践  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  学习通在线学习平台 学习通网页版直接进入课程中心  谷歌google账号怎么注册账号 谷歌账号注册官方流程  React Hooks最佳实践:动态组件状态管理的组件化方案  Android Studio计算器C键功能异常排查与修复教程  响应式CSS Grid布局:优化网格项在小屏幕下的堆叠与宽度适配  PySpark中从现有列右侧提取可变长度字符创建新列的教程  谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版  QQ官网正版登录链接 QQ在线登录入口最新  Golang如何使用context实现超时取消_Golang context超时取消模式实践  12306选座怎么选到特殊座位_12306特殊座位选择注意事项  夸克浏览器图书入口 夸克手机浏览器阅读入口  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全 

搜索