专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

golang Gob是什么

来源:小易整编  作者:小易  发布时间:2024-03-21 07:38
摘要:gob是golang包自带的一个数据结构序列化的编码/解码工具,编码使用encoder,解码使用decoder。gob使用io.writer接口,通过newencoder()函数创建encoder对象通过调用encode()方法实现编码操...

gob是golang包自带的一个数据结构序列化的编码/解码工具,编码使用encoder,解码使用decoder。gob使用io.writer 接口,通过newencoder()函数创建encoder对象通过调用encode()方法实现编码操作;使用io.reader接口,通过newdecoder()函数创建decoder对象并调用decode()方法完成解码操作。

golang Gob是什么

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

  gob全称为:Go binary

  Golang自带的一个数据结构序列化编码/解码工具,也就是说gob可以讲go中的一个数据结构序列化成某种东西,还能反序列化!序列化成啥我们后面来看,不管是变成一个字符串,变成二进制流,变成啥先不管,反正作用就是序列化。

  Gob使用时我们需要关注Encoder和Decoder对象,顾名思义,一个是编码的时候用的,一个是解码的时候用的,我们看一下怎么获取这两个对象先:

   所以很明确,需要调用这两个函数来获取Encoder和Decoder对象。注意这里的参数是io.Writer和io.Reader接口类型,我们在上一讲介绍过这两个接口,所以这里需要的参数分别是实现了io.Writer和io.Reader接口类型的对象即可。

  Encoder和Decoder分别有一个主要的方法是:

  看到这里我们已经可以得到如下结论:

  Gob 使用 io.Writer 接口,通过 NewEncoder() 函数创建 Encoder 对象通过调用 Encode()方法实现编码操作;使用 io.Reader 接口,通过 NewDecoder() 函数创建 Decoder 对象并调用 Decode()方法完成解码操作!

  接下来我们试着用一下这个Encoder和Decoder,就轻轻松松入门gob了,来看第一个例子

  例1:数据结构与bytes.Buffer之间的转换(编码成字节切片)

 1package main 2 3import ( 4    "bytes" 5    "fmt" 6    "encoding/gob" 7    "io" 8) 910//准备编码的数据11type P struct {12    X, Y, Z int13    Name    string14}1516//接收解码结果的结构17type Q struct {18    X, Y *int3219    Name string20}2122func main() {23    //初始化一个数据24    data := P{3, 4, 5, "CloudGeek"}25    //编码后得到buf字节切片26    buf := encode(data)27    //用于接收解码数据28    var q *Q29    //解码操作30    q = decode(buf)31    //"CloudGeek": {3,4}32    fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)3334}3536func encode(data interface{}) *bytes.Buffer {37    //Buffer类型实现了io.Writer接口38    var buf bytes.Buffer39    //得到编码器40    enc := gob.NewEncoder(&buf)41    //调用编码器的Encode方法来编码数据data42    enc.Encode(data)43    //编码后的结果放在buf中44    return &buf45}4647func decode(data interface{}) *Q {48    d := data.(io.Reader)49    //获取一个解码器,参数需要实现io.Reader接口50    dec := gob.NewDecoder(d)51    var q Q52    //调用解码器的Decode方法将数据解码,用Q类型的q来接收53    dec.Decode(&q)54    return &q55}
登录后复制

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

 1package main 2 3import ( 4    "encoding/gob" 5    "os" 6    "fmt" 7) 8 9//试验用的数据类型10type Address struct {11    City    string12    Country string13}1415//序列化后数据存放的路径16var filePath string1718func main() {19    filePath = "./address.gob"20    encode()21    pa := decode()22    fmt.Println(*pa) //{Chengdu China}23}2425//将数据序列号后写到文件中26func encode() {27    pa := &Address{"Chengdu", "China"}28    //打开文件,不存在的时候新建29    file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666)30    defer file.Close()3132    //encode后写到这个文件中33    enc := gob.NewEncoder(file)34    enc.Encode(pa)35}3637//从文件中读取数据并反序列化38func decode() *Address {39    file, _ := os.Open(filePath)40    defer file.Close()4142    var pa Address43    //decode操作44    dec := gob.NewDecoder(file)45    dec.Decode(&pa)46    return &pa47}
登录后复制

  上面2个例子都不难,我去掉了错误处理之类的代码,尽量注释了每块代码,耐心看完这2个例子应该就能体会gob的encode和decode精髓了。

理解gob是什么的基础上,如果你需要使用gob开发,建议详细看一下官方文档,了解一下更多的细节:golang.org/pkg/encoding/gob/

【相关推荐:Go视频教程、编程教学】

以上就是golang Gob是什么的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/1152128.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • 某台微机安装的是64位操作系统中,64位指的是什么

    某台微机安装的是64位操作系统中,64位指的是什么

    某台微机安装的是64位操作系统中,64位指的是cpu的字长,即cpu每次能处理64位二进制数据。字长是cpu的主要技术指标之一,指的是cpu一次能并行处理的二进制位数,字长总是8的整数倍,通常pc机的字长为32位,64位。本教程操作环境:w...

  • c语言是什么意思

    c语言是什么意思

    一:c语言是什么意思C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言,以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低...

  • skype是什么软件

    skype是什么软件

    skype是一种简单的免费软件,使您能够在数分钟之内在世界上的任何角落拨打免费电话,它使用全新的p2p【对等】技术将您与其他skype用户相连接。Skype是一种简单的免费软件,使您能够在数分钟之内在世界上的任何角落拨打免费电话。Sky...

  • 计算机的三类总线分别是什么?

    计算机的三类总线分别是什么?

    计算机的三类总线分别是:控制总线、地址总线和数据总线。控制总线用于将微处理器控制单元的信号,传送到周边设备;地址总线用来指定在ram之中储存的数据的地址;数据总线用于在cpu与ram之间来回传送需要处理或是需要储存的数据。总线(Bus)是计...

  • 2k屏幕是什么意思

    2k屏幕是什么意思

    2k屏幕是指分辨率能够达到2560*1440的屏幕。2k是一个通用术语,指屏幕或者内容的水平分辨率达约2000像素的分辨率等级;又因“16:9”的比例是高清晰度视频规格的国际标准,所以2k分辨率在视频制作、显示屏等领域常见格式为2560*1...

  • mysql中的不等于符号是什么

    mysql中的不等于符号是什么

    mysql中的不等于符号有两种:“!=”和“”;它们都可用于判断数字、字符串、表达式是否不相等。对于“!=”和“”,如果两侧操作数不相等,返回值为1,否则返回值为0;如果两侧操作数有一个是null,那么返回值也是null。本教程操作环境:w...

  • ipad a1822是什么型号

    ipad a1822是什么型号

    ipada1822是苹果ipad第5代的型号;ipad第5代是苹果公司于2017年03月21日在美国加利福尼亚州发布的平板电脑;该机型采用铝镁合金材质一体成型结构;前端外框为白色或黑色;有银色、金色和深空灰色3种外观颜色。本教程操作环境:...

  • html中浮动是什么

    html中浮动是什么

    在html中,浮动就是让元素可以向左或向右移动,直到它的外边距碰到其父级的内边距或者是上一个元素的外边距,只需要给元素设置“float:left|right|none|inherit”样式即可。本教程操作环境:windows7系统、CSS3...

  • 周排行
  • 月排行
  • 年排行

精彩推荐