新闻中心
Golang如何使用encoding/gob进行对象序列化_Golang gob对象序列化实践
Golang的gob包提供高效二进制序列化,适用于Go间数据交换。1. 结构体字段需大写才能被序列化;2. 使用gob.NewEncoder将对象编码到文件;3. 用gob.NewDecoder从文件恢复对象;4. 含接口时须调用gob.Register注册类型,如gob.Register(Dog{})。

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成品工具大全


2025-11-19
浏览次数:次
返回列表