网络编程
位置:首页>> 网络编程>> Go语言>> golang 用msgpack高效序列化的案例

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com