目录
  • msgpack
    • 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(), "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:"男"} }

到此这篇关于golang 用msgpack高效序列化的案例的文章就介绍到这了,更多相关golang msgpack序列化内容请搜索本网站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本网站!

您可能感兴趣的文章:

  • Golang IOT中的数据序列化与解析过程
  • Golang使用gob实现结构体的序列化过程详解
  • Golang中Json的序列化和反序列化的使用
  • 解决Golang json序列化字符串时多了\的情况
  • golang的序列化与反序列化的几种方式
  • golang如何自定义json序列化应用详解
  • golang中json反序列化可能遇到的问题
  • Go语言中的数据格式(json、xml 、msgpack、protobuf)使用总结