Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go 数据存储篇(四):通过 Gob 包序列化二进制数据

Go 数据存储篇(四):通过 Gob 包序列化二进制数据

作者头像
学院君
发布于 2020-09-28 08:18:29
发布于 2020-09-28 08:18:29
2.4K00
代码可运行
举报
文章被收录于专栏:学院君的专栏学院君的专栏
运行总次数:0
代码可运行

前面两篇教程学院君给大家介绍了如何基于 JSON 和 CSV 格式序列化数据到文本文件,除此之外,Go 官方还提供了 encoding/gob 包将数据序列化为二进制流以便通过网络进行传输。

我们在前面 Go 入门教程中已经介绍过 Gob 包作为二进制数据编解码工具的基本使用,这里简单演示下如何将 Gob 编码后的二进制数据写入磁盘文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "io/ioutil"
)

type Article struct {
    Id int
    Title string
    Content string
    Author string
}

// 写入二进制数据到磁盘文件
func write(data interface{}, filename string)  {
    buffer := new(bytes.Buffer)
    encoder := gob.NewEncoder(buffer)
    err := encoder.Encode(data)
    if err != nil {
        panic(err)
    }
    err = ioutil.WriteFile(filename, buffer.Bytes(), 0600)
    if err != nil {
        panic(err)
    }
}

// 从磁盘文件加载二进制数据
func read(data interface{}, filename string) {
    raw, err := ioutil.ReadFile(filename)
    if err != nil {
        panic(err)
    }
    buffer := bytes.NewBuffer(raw)
    dec := gob.NewDecoder(buffer)
    err = dec.Decode(data)
    if err != nil {
        panic(err)
    }
}

func main()  {
    article := Article{
        Id: 1,
        Title: "基于 Gob 包编解码二进制数据",
        Content: "通过 Gob 包序列化二进制数据以便通过网络传输",
        Author: "学院君",
    }
    write(article, "article_data")
    var articleData Article
    read(&articleData, "article_data")
    fmt.Printf("%#v\n", articleData)
}

运行上述代码,可以正常解码出二进制数据,说明通过 Gob 包编解码成功:

在当前目录下也可以看到生成的 article_data 文件,其中包含的是二进制格式的编码数据:

关于文本数据和二进制数据的序列化我们就简单介绍到这里,下篇教程开始,学院君将开始给大家介绍如何在 Go 语言中通过数据库存取数据。

(全文完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 极客书房 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
encoding/gob
gob包管理gob流——在编码器(发送器)和解码器(接受器)之间交换的binary值。一般用于传递远端程序调用(RPC)的参数和结果,如net/rpc包就有提供。
酷走天涯
2019/06/11
5340
encoding/gob
Go 语言网络编程系列(七)—— RPC 编程篇:默认编解码工具 Gob
Gob 是 Go 语言的一个序列化数据结构的编码解码工具,在 Go 标准库中内置了 encoding/gob 包以供使用。一个数据结构使用 Gob 进行序列化之后,能够用于网络传输,因此它的典型适用场景就是 RPC 编程,我们在上篇教程也提到了 net/rpc 包默认使用 encoding/gob 进行编解码,以 rpc.Client 为例,其初始化代码如下:
学院君
2019/11/12
1.8K0
Go 语言网络编程系列(七)—— RPC 编程篇:默认编解码工具 Gob
Go每日一库之186:sonic(高性能JSON库)
我们在日常开发中,常常会对JSON进行序列化和反序列化。Golang提供了encoding/json包对JSON进行Marshal/Unmarshal操作。但是在大规模数据场景下,该包的性能和开销确实会有点不够看。在生产环境下,JSON 序列化和反序列化会被频繁的使用到。在测试中,CPU使用率接近 10%,其中极端情况下超过 40%。因此,JSON 库的性能是提高机器利用率的关键问题。
luckpunk
2023/09/30
6K0
应用:区块链钱包开发,交易平台系统搭建技术细节
广义上,钱包是一个应用程序,为用户提供交互界面。钱包控制用户访问权限、管理比特比地址及秘钥、跟踪余额、创建交易和签名交易
KFZ433
2022/06/15
1.2K0
Go 中序列化与反序列化
但是 encoding/json 对于 map[string]interface 中的数字类型(整型、浮点型等)都序列化成float64类型。
dandelion1990
2024/01/02
2420
Go 数据存储篇(二):通过 JSON 格式存取文本数据
内存存储性能虽好,但是无法持久化存储,并且容量也是有限的,要将大块数据永久保存起来,还是需要借助文件系统和数据库。我们先来看文件存储。
学院君
2020/09/11
5.3K0
go中struct和[]byte互相转换
读取将r中的结构化二进制数据读入数据。 数据必须是指向固定大小值或固定大小值切片的指针。 从r读取的字节使用指定的字节顺序进行解码,并写入数据的连续字段。 当解码布尔值时,零字节被解码为假,并且任何其他非零字节被解码为真。 读入结构时,将跳过具有空白(_)字段名称的字段的字段数据; 即,空白字段名称可用于填充。 读入结构时,必须导出所有非空白字段,否则“读取”可能会出现混乱。
solate
2019/07/22
19.6K0
n1.Go语言之三方扩展学习记录
最近在写一个gin框架的session服务时遇到了一个问题,Go语言中的json包在序列化空接口存放的数字类型(整型、浮点型等)都序列化成float64类型。
全栈工程师修炼指南
2022/09/29
2260
Go 语言网络编程系列(八)—— RPC 编程篇:使用 JSON 对传输数据进行编解码
上篇教程我们介绍了 Go 语言内置的数据序列化工具 —— Gob,但是 Gob 只能在 Go 语言内部使用,不支持跨语言 RPC 调用,如果要实现这一功能,就需要对 RPC 接口的编解码实现进行自定义。
学院君
2019/11/21
1.9K0
Go 语言网络编程系列(八)—— RPC 编程篇:使用 JSON 对传输数据进行编解码
Go语言中json序列化的一个小坑,建议多留意一下
文章链接:https://cloud.tencent.com/developer/article/2469689
南山竹
2024/11/24
1730
Go语言中json序列化的一个小坑,建议多留意一下
实体类的二进制序列化
在.NET中,我们可以将对象序列化从而保存对象的状态到内存或者磁盘文件中,或者分布式应用程序中用于系统通信,一般来说,二进制序列化的效率要高,所获得的字节数最小,我们来看看下面的例子: private static void Main(string[] args) {   MemoryStream ms = null;   Customer customer = Customer.GetOneCustomer();   using (ms = new MemoryStream())   {       va
用户1177503
2018/02/26
1.1K0
Linux下Redis数据库安装使用及Go语言操作Redis
Redis简介 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
星哥玩云
2022/08/17
7380
Linux下Redis数据库安装使用及Go语言操作Redis
Golang 持久化
持久化 程序可以定义为算法+数据。算法是我们的代码逻辑,代码逻辑处理数据。数据的存在形式并不单一,可以存在数据库,文件。无论存在什么地方,处理数据的时候都需要把数据读入内存。如果直接存在内存中,不就可以可以直接读了么?的确,数据可以存在内存中。涉及数据存储的的过程称之为持久化。下面golang中的数据持久化做简单的介绍。主要包括内存存储,文件存储和数据库存储。 内存存储 所谓内存存储,即定义一些数据结构,数组切片,图或者其他自定义结构,把需要持久化的数据存储在这些数据结构中。使用数据的时候可以直接操作这些结
李海彬
2018/03/26
2.7K0
Go 每日一库之 gorilla/securecookie
cookie 是用于在 Web 客户端(一般是浏览器)和服务器之间传输少量数据的一种机制。由服务器生成,发送到客户端保存,客户端后续的每次请求都会将 cookie 带上。cookie 现在已经被多多少少地滥用了。很多公司使用 cookie 来收集用户信息、投放广告等。
用户7731323
2021/08/20
6810
Go 每日一库之 gorilla/securecookie
C#对象二进制序列化优化:位域技术实现极限压缩
在操作系统中,进程信息对于系统监控和性能分析至关重要。假设我们需要开发一个监控程序,该程序能够捕获当前操作系统的进程信息,并将其高效地传输到其他端(如服务端或监控端)。在这个过程中,如何将捕获到的进程对象转换为二进制数据,并进行优化,以减小数据包的大小,成为了一个关键问题。本文将通过逐步分析,探讨如何使用位域技术对C#对象进行二进制序列化优化。
沙漠尽头的狼
2024/01/26
2380
C#对象二进制序列化优化:位域技术实现极限压缩
高效的序列化/反序列化数据方式 Protobuf
上篇文章中其实已经讲过了 encode 的过程,这篇文章以 golang 为例,从代码实现的层面讲讲序列化和反序列化的过程。
一缕殇流化隐半边冰霜
2018/08/30
3.8K0
高效的序列化/反序列化数据方式 Protobuf
一文吃透 Go 内置 RPC 原理
hello 大家好呀,我是小楼,这是系列文《Go底层原理剖析》的第三篇,依旧分析 Http 模块。我们今天来看 Go内置的 RPC。说起 RPC 大家想到的一般是框架,Go 作为编程语言竟然还内置了 RPC,着实让我有些吃鲸。
龟仙老人
2023/03/02
4620
Go 数据存储篇(三):通过 CSV 格式读写文本数据
在上篇教程中,学院君给大家演示了如何通过 JSON 编码存储文本数据到磁盘文件,除此之外,Go 语言还提供了对 CSV 格式文件的支持,CSV 文件本质上虽然就是文本格式数据,不过可以兼容 Excel 表格,这样一来就可以极大方便我们对大批量数据进行管理。
学院君
2020/09/11
9.2K0
GoLang读写数据---下
数据结构要在网络中传输或保存到文件,就必须对其编码和解码;目前存在很多编码格式:JSON,XML,gob,Google 缓冲协议等等。Go 语言支持所有这些编码格式;在本节,我们将讨论前三种格式。
大忽悠爱学习
2022/08/23
6270
go :gin 模板创建单个二进制文件
go get github.com/jessevdk/go-assets-builde
IT工作者
2022/07/25
6480
相关推荐
encoding/gob
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验