golang 用msgpack高效序列化的案例
作者:曲帅369 时间:2024-04-26 17:32:52
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
标签:golang,msgpack,序列化
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python+Opencv实现图像匹配功能(模板匹配)
2022-06-28 08:56:35
![](https://img.aspxhome.com/file/2023/3/98933_0s.jpg)
python tkinter制作用户登录界面的简单实现
2021-01-07 06:00:09
![](https://img.aspxhome.com/file/2023/4/85344_0s.jpg)
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2022-01-26 16:48:46
Python对数据进行插值和下采样的方法
2022-06-02 03:36:41
1亿条数据在PHP中实现Mysql数据库分表100张
2011-06-02 09:31:00
Python 如何实现批量转换视频音频的采样率
2022-06-30 11:16:46
![](https://img.aspxhome.com/file/2023/7/121027_0s.png)
在vant中如何使用dialog弹窗
2024-05-22 10:41:50
![](https://img.aspxhome.com/file/2023/4/123224_0s.png)
如何只取数据库的前3条记录?
2010-06-28 18:28:00
JS、jQuery中select的用法详解
2024-04-19 09:57:43
自动备份Oracle数据库
2024-01-16 01:16:55
CSS中背景background的一些语法
2009-03-24 21:02:00
Jsp生成页面验证码的方法[附代码]
2023-06-25 07:46:42
MySQL获取系统性能和状态代码
2024-01-13 10:56:18
Python字符串三种格式化输出
2022-12-15 09:47:59
关于Python函数的定义和参数
2021-05-08 20:37:28
Python中的优先队列(priority queue)和堆(heap)
2023-11-22 05:40:03
![](https://img.aspxhome.com/file/2023/0/65900_0s.png)
python判断计算机是否有网络连接的实例
2023-01-28 22:36:27
python实现屏保程序(适用于背单词)
2021-09-26 04:24:00
![](https://img.aspxhome.com/file/2023/9/81809_0s.jpg)
python数据预处理之将类别数据转换为数值的方法
2023-04-17 21:43:18
MySQL ALTER命令使用详解
2024-01-18 09:40:23