golang中的Gob是什么
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之间的转换(编码成字节切片)
package main
import (
"bytes"
"fmt"
"encoding/gob"
"io"
)
//准备编码的数据
type P struct {
X, Y, Z int
Name string
}
//接收解码结果的结构
type Q struct {
X, Y *int32
Name 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方法来编码数据data
enc.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 main
import (
"encoding/gob"
"os"
"fmt"
)
//试验用的数据类型
type Address struct {
City string
Country string
}
//序列化后数据存放的路径
var filePath string
func 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
}
上面2个例子都不难,我去掉了错误处理之类的代码,尽量注释了每块代码,耐心看完这2个例子应该就能体会gob的encode和decode精髓了。
理解gob是什么的基础上,如果你需要使用gob开发,建议详细看一下官方文档,了解一下更多的细节:https://golang.org/pkg/encoding/gob/
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanfbhke
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13