golang 用msgpack高效序列化的案例
作者:曲帅369 发布时间:2024-04-26 17:32:52
标签:golang,msgpack,序列化
msgpack
MessagePack是一种高效的二进制序列化格式。它允许你在多种语言(如JSON)之间交换数据。但它更快更小。
golang 用msgpack高效序列化
package main
import (
"fmt"
"github.com/go-redis/redis"
"reflect"
"github.com/vmihailenco/msgpack"
)
// 声明一个全局的rdb变量
var rdb *redis.Client
// 初始化连接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
type Test struct {
name string
}
func main() {
var countryCapitalMap map[string]string /*创建集合 */
countryCapitalMap = make(map[string]string)
/* map插入key - value对,各个国家对应的首都 */
countryCapitalMap["France"] = "巴黎"
countryCapitalMap["Italy"] = "罗马"
countryCapitalMap["Japan"] = "东京"
countryCapitalMap["India "] = "新德里"
fmt.Println("原数据-", countryCapitalMap)
//in := map[string]interface{}{"foo": uint32(123456789), "hello": "world"}
in := countryCapitalMap
res, err := msgpack.Marshal(in)
if err != nil {
fmt.Printf("序列化失败")
}
//fmt.Sprintf("数据类型%T", b)
fmt.Println(reflect.TypeOf(res))
fmt.Println("序列化数据--", res)
//连接redis
initClient()
//存入redis数据类型[]type可以存入
bool := rdb.Set("val", res, 0).Err()
if bool != nil {
fmt.Printf("set val failed, err:%v\n", err)
return
}
//返回类型可变
val, err := rdb.Get("val").Bytes()
if err != nil {
fmt.Printf("get val failed, err:%v\n", err)
return
}
fmt.Println("redis取出数据--", val)
var out map[string]string
bool = msgpack.Unmarshal(val, &out)
if bool != nil {
fmt.Println("反序列化失败")
}
fmt.Println("反序列化数据--", out)
}
安装
go get -u github.com/vmihailenco/msgpack
示例
package main
import (
"fmt"
"github.com/vmihailenco/msgpack"
)
// msgpack demo
type Person struct {
Name string
Age int
Gender string
}
func main() {
p1 := Person{
Name: "沙河娜扎",
Age: 18,
Gender: "男",
}
// marshal
b, err := msgpack.Marshal(p1) // 将结构体转化为二进制流
if err != nil {
fmt.Printf("msgpack marshal failed,err:%v", err)
return
}
// unmarshal
var p2 Person
err = msgpack.Unmarshal(b, &p2) // 将二进制流转化回结构体
if err != nil {
fmt.Printf("msgpack unmarshal failed,err:%v", err)
return
}
fmt.Printf("p2:%#v\n", p2) // p2:main.Person{Name:"沙河娜扎", Age:18, Gender:"男"}
}
来源:https://blog.csdn.net/weixin_41112414/article/details/108683577


猜你喜欢
- 前言你的心要如溪水般柔软,你的眼波要像春天般明媚。 ——余光中似乎很少看见湍急的溪流,多数
- 从百度查到在django中,使用post方法时,需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站
- 使用Django框架搭建后端服务器,后台接收前端传递过来xlsx的文件,直接将前端传递的文件转化为DataFrame或直接将文件保存。url
- selenium 安装与 chromedriver安装我们前文提到,Python脚本中使用了selenium库,而selenium又通过ch
- 如下所示:node2:/django/mysite/blog#cat views.py1,# -*- coding: utf-8 -*-fr
- 前言在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插
- 在我们处理文件的时候,会遇到这样的一种场景,我们需要对某个文件进行操作,然后生成与原文件名相同的文件(只是文件格式改变)。那么这个时候就可以
- 淡入淡出图片轮换轮播效果,可以做新闻图片推荐需要的拿去用,效果预览请点击运行代码相关效果推荐:迅雷首页新闻图片轮播效果js源码 <!D
- #{} 和 ${} 的区别#{} 匹配的是一个占位符,相当于 JDBC 中的一个?,会对一些敏感字符进行过滤,编译过后会对传递的值加上双引号
- 这是不久前写的一个分页存储过程,可应用于SQL Server 2005上面: if object_ID('[proc_SelectF
- PHP程序员玩转Linux系列文章:1.PHP程序员玩转Linux系列-怎么安装使用CentOS2.PHP程序员玩转Linux系列-lnmp
- 树的实质是很多条数据按照一定的内在关系,分层级显示出来。因此每一条数据包括数据项和相互关系。数据项就对应了树中的column,而相互关系对应
- 随着访问量的增加,对于一些比较耗时的数据库读取操作,一般采用将写入与读取操作分开来缓解数据库的压力,数据库引擎一般采用Master/Slav
- 前言众所周知我们获取的第一手数据往往都是比较杂乱无章的,这些文件保存一般都是csv文件或者是excel文件,读取转换成DataFrame还有
- 1. 腐蚀 & 膨胀1.1什么是腐蚀&膨胀腐蚀&膨胀是图像形态学中的两种核心操作腐蚀可以描述为是让图像沿着自己的边界
- [Python标准库]decimal——定点数和浮点数的数学运算 &n
- 通常我们提交代码一般都是 git add ,git commit -m, git push的这么个流程。添加到暂存区
- 表格中我们经常需要动态加载数据, 如果有多个页面都需要用到表格, 那我希望可以有个组件, 只传数据过去显示, 不用每个页面都去写这么一段内容
- 第一列按照goodsid局部分组,然后在分组后的记录中按照audittime升序排序得到序号,从而显示某商品得第几次变迁。 第二列是取该商品
- 这里假设你是通过models的ImageField上传图片,并期望在前台img标签中能显示。能否访问图片关键在于,是否能通过正确的路径访问。