Gob 是 Go 自己的以二进制形式序列化和反序列化程序数据的格式;可以在 encoding 包中找到。这种格式的数据简称为 Gob (即 Go binary 的缩写)。类似于 Python 的 “pickle” 和 Java 的 “Serialization”。

Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以及应用程序和机器之间的数据传输。 它和 JSON 或 XML 有什么不同呢?Gob 特定地用于纯 Go 的环境中,例如,两个用 Go 写的服务之间的通信。这样的话服务可以被实现得更加高效和优化。 Gob 不是可外部定义,语言无关的编码方式。因此它的首选格式是二进制,而不是像 JSON 和 XML 那样的文本格式。 Gob 并不是一种不同于 Go 的语言,而是在编码和解码过程中用到了 Go 的反射。

Gob 文件或流是完全自描述的:里面包含的所有类型都有一个对应的描述,并且总是可以用 Go 解码,而不需要了解文件的内容。

只有可导出的字段会被编码,零值会被忽略。在解码结构体的时候,只有同时匹配名称和可兼容类型的字段才会被解码。当源数据类型增加新字段后,Gob 解码客户端仍然可以以这种方式正常工作:解码客户端会继续识别以前存在的字段。并且还提供了很大的灵活性,比如在发送者看来,整数被编码成没有固定长度的可变长度,而忽略具体的 Go 类型。
 例1:数据结构与bytes.Buffer之间的转换(编码成字节切片)

package mainimport ("bytes""fmt""encoding/gob""io"
)//准备编码的数据
type P struct {X, Y, Z intName    string
}//接收解码结果的结构
type Q struct {X, Y *int32Name string
}func main() {//初始化一个数据data := P{3, 4, 5, "CloudGeek"}//编码后得到buf字节切片buf := encode(data)//用于接收解码数据var q *Q//解码操作q = decode(buf)//"CloudGeek": {3,4}fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)}func encode(data interface{}) *bytes.Buffer {//Buffer类型实现了io.Writer接口var buf bytes.Buffer//得到编码器enc := gob.NewEncoder(&buf)//调用编码器的Encode方法来编码数据dataenc.Encode(data)//编码后的结果放在buf中return &buf
}func decode(data interface{}) *Q {d := data.(io.Reader)//获取一个解码器,参数需要实现io.Reader接口dec := gob.NewDecoder(d)var q Q//调用解码器的Decode方法将数据解码,用Q类型的q来接收dec.Decode(&q)return &q
}

例2:数据结构到文件的序列化和反序列化

package mainimport ("encoding/gob""os""fmt"
)//试验用的数据类型
type Address struct {City    stringCountry string
}//序列化后数据存放的路径
var filePath stringfunc main() {filePath = "./address.gob"encode()pa := decode()fmt.Println(*pa) //{Chengdu China}
}//将数据序列号后写到文件中
func encode() {pa := &Address{"Chengdu", "China"}//打开文件,不存在的时候新建file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)defer file.Close()//encode后写到这个文件中enc := gob.NewEncoder(file)enc.Encode(pa)
}//从文件中读取数据并反序列化
func decode() *Address {file, _ := os.Open(filePath)defer file.Close()var pa Address//decode操作dec := gob.NewDecoder(file)dec.Decode(&pa)return &pa
}

Go:专属二进制编码方式Gob相关推荐

  1. 学计算机的专属表白方式,九个学科专属表白句子-花式表白公式【蜜匠婚礼】...

    表白的方式有很多种,较近被各个学科的学霸表白给刷屏了,九个学科专属表白句子一般人还看不懂,毕竟非常专业,但是没毛病,花式表白有哪些大家都知道吗? 一.九个学科专属表白句子 1.哲学专业:人只有通过他的 ...

  2. 智能优化算法之遗传算法(GA)的实现(基于二进制编码,Python附源码)

    文章目录 一.遗传算法的实现思路 二.基于二进制编码方式的遗传算法的实现 1.库的导入 2.目标函数 3.个体编码函数 4.个体解码函数 5.选择函数 6.交叉函数 7.变异函数 8.算法主流程 一. ...

  3. 你的电竞快感它的专属缔造 这款蓝牙音箱有型又有范儿

    一般的居家办公用户选音箱,只要音质不赖外形顺眼与周围环境"百搭"就好,而对于电竞玩家群体而言,它们对音箱的要求无疑更高,外形养眼爆裂张扬,功能好玩个性化,当然还要音质呈现要贴合各种 ...

  4. 【java】简单的文件加密解密方式

    一.基础知识 1.异或加密解密方式(推荐) package com.test;import java.io.*;public class test1 {private static final int ...

  5. 女生玩游戏专属神器,华为平板M5青釉版高颜值、强性能

    根据调查数据,现在女生玩游戏的比例已经很高.也就是说游戏不再是男生的专属娱乐方式.女生们一般都是玩休闲类的手游,而且她们也开始对玩游戏的设备有了更高的要求.女生在看中游戏设备的性能同时,更注重设备外观 ...

  6. Coinbase将与全球第二大保险经纪公司Aon合作推出其专属保险公司

    据 Coindesk 报道,美国最大的加密货币交易所 Coinbase 正在寻求与全球第二大保险经纪公司 Aon 合作推出其专属保险公司. 据 Coindesk 此前报道,Aon 2018 年就已经组 ...

  7. fastText的原理剖析

    fastText的原理剖析 1. fastText的模型架构 fastText的架构非常简单,有三层:输入层.隐含层.输出层(Hierarchical Softmax) 输入层:是对文档embeddi ...

  8. 遗传算法来控制进入(一)

            博主前言:此文章来自一份网络资料,原作者不明,是我看过的最好的一份遗传算法教程,假设你能耐心看完他,相信你一定能基本掌握遗传算法. 遗传算法的有趣应用非常多.诸如寻路问题.8数码问题. ...

  9. 遗传算法详解(GA)

    版权声明:欢迎访问,欢迎讨论,拒绝抄袭! https://blog.csdn.net/u010451580/article/details/51178225 </div><link ...

最新文章

  1. 沫沫金:Java快速合并两个数组【绝技】
  2. 计算机知识幼儿园,幼儿园中班计算机教学工作计划
  3. 从小白到精通python要多久-零基础如何学Python?小白学Python需要多久?
  4. 使用python 创建快捷方式
  5. Coding-Job:从研发到生产的容器化融合实践
  6. jqgrid 批量启动所有行为可编辑状态
  7. 学习面向对象的三条主线之三 面向对象的三大特征 关键字
  8. MVC使用jQuery从视图向控制器传递Model的2种方法
  9. 2款免费的图片压缩工具
  10. WP全新COS美女写真网站整站源码+两套下载站模板
  11. ai面试的优缺点_被AI程序面试是一种怎样的体验?该如何准备!!!
  12. vue3.0 路由隐藏地址栏
  13. 台式机创建文件服务器,如何将台式机做成云存储服务器
  14. 谨以此辞职信祭奠我的第一份工作
  15. 现在还可以做公众号吗?我是如何在细分领域公众号粉丝一年不到从0到5000+增长?
  16. 招商银行信用卡中心18秋招题解
  17. 数字视音频处理知识点小结
  18. 协作通信-af df的matlab仿真,协作通信三种协作方式(AF+DF+CC)的matlab仿真程序
  19. iOS Swift RxSwift 的使用(二)
  20. 计算机与通信网络潘书文答案,计算机与通信网络潘书文答案

热门文章

  1. 韶音OpenRun Pro怎么样,南卡Runner Pro3和韶音OpenRun Pro哪个更好
  2. (已开源)一款仿线上电商项目《有宠商城》
  3. ME4012磁盘服务器更换硬盘
  4. 在线考试系统-教师服务-业务功能说明
  5. 拖延症的克星——TaskPlan
  6. php图形验证码颜色,PHP实现生成带背景的图形验证码功能
  7. HashMap:为什么容量总是为2的次幂
  8. 【Books】推荐书单(算法、JavaWeb、Python爬虫、机器学习、程序人生、人文社科)
  9. 我的世界怎么换java材质包_我的世界关于PE版本的材质包更换教程
  10. (五)OpenCV | 斑点中心检测(图像矩)