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


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 从文件读取并恢复原始对象。

Primeshot Primeshot

专业级AI人像摄影工作室

Primeshot 36 查看详情 Primeshot

  • 打开之前保存的 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亚马逊  # 武侯网站建设推广  # 就能  # 文件压缩  # 加载  # js  # 资源管理  # 数据交换  # 如何实现  # 适用于  # 如何使用  # 序列化  # speak  # red  # 持久化存储  # 编码  # golang  # go  # json 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 京东快递包裹信息查询入口 京东快递官方查询平台入口  123网页端官方登录页 123邮箱网页版即时通讯服务  教资成绩怎么查询  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  如何查询个人病历记录  139邮箱登录入口官网 139邮箱登录入口官网网址  《书耽》更换手机号方法  iPhone14无法连接蓝牙设备如何解决  HTML中多图片上传与预览:解决ID冲突的专业指南  荣耀Magic7拍照夜景噪点处理_荣耀Magic7相机优化  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  《360浏览器》设置摄像头权限方法  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  电脑双系统如何安装和卸载 Windows和Linux双系统安装教程【详解】  Mac怎么关闭按键声音_Mac键盘打字音效设置  RxJS中如何高效地在一个函数内处理和合并多个数据集合  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  Win10如何彻底关闭OneDrive Win10禁用云同步功能【纯净】  Python测试中模块导入路径解析的最佳实践  J*a中为什么强调组合优于继承_组合模式带来的灵活性与可维护性解析  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  《真我》申请退款方法  阿里云共享相册入口在哪  苹果11如何更换iCloud账号_苹果11账号切换的具体步骤  XPath动态元素定位:如何精准选择文本内容变化的元素  Bootstrap 5导航栏折叠功能失效:数据属性迁移指南  第五人格PC版怎么避免被封号_第五人格PC版防封号注意事项  《一起考教师》账号注销方法  b站网页版入口 哔哩哔哩官方网站直接进入  如何查找哪个composer包引入了特定的依赖?  《长生:天机降世》火塔小怪大全  Python csv 模块处理非字符串数据:列表写入 CSV 文件的机制解析  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  mysql数据库索引类型有哪些_mysql索引类型解析  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  CDR如何复制交互式填充色  PyEZ 配置提交中 RpcTimeoutError 的健壮性处理策略  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  b站怎么用微信登录_b站微信登录方法  汽水音乐车机版 汽水音乐车机版官方入口  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  Chart.js 教程:自定义插件实现图表与图例间距调整  微博网页版入口链接 微博网页版在线互动平台  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  学习通网页版课程打不开_课程无法访问时的解决方法  realme 10 Pro息屏方案_realme 10 Pro省电策略  《爱南宁》认证电动车方法  Flash AS3.0简易相册制作  12306售票时间最新规定 | 网上订票和车站窗口时间一样吗 

 2025-11-19

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.