golang 用msgpack高效序列化的案例

 更新时间:2023年05月20日 08:58:47   作者:曲帅369  
msgpack是一个非常受欢迎的Go序列化库,具有很好的跨语言支持,这篇文章主要介绍了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:"男"}
}

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

相关文章

  • Golang如何实现任意进制转换的方法示例

    Golang如何实现任意进制转换的方法示例

    进制转换是人们利用符号来计数的方法,进制转换由一组数码符号和两个基本因素“基数”与“位权”构成,这篇文章主要给大家介绍了关于Golang如何实现10进制转换62进制的方法,文中给出了详细的示例代码供大家参考学习学习,下面随着小编来一起学习学习吧。
    2017-09-09
  • golang使用DockerFile正确用法指南

    golang使用DockerFile正确用法指南

    docker在开发和运维中使用的场景越来越多,作为开发人员非常有必要了解一些docker的基本知识,而离我们工作中最近的也就是对应用的docker部署编排了,这篇文章主要给大家介绍了关于golang使用DockerFile的正确用法指南,需要的朋友可以参考下
    2024-03-03
  • GoLand编译带有构建标签的程序思路详解

    GoLand编译带有构建标签的程序思路详解

    这篇文章主要介绍了GoLand编译带有构建标签的程序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Go语言使用sqlx操作数据库的示例详解

    Go语言使用sqlx操作数据库的示例详解

    sqlx 是 Go 语言中一个流行的第三方包,它提供了对 Go 标准库 database/sql 的扩展,本文重点讲解 sqlx 在 database/sql 基础上扩展的功能,希望对大家有所帮助
    2023-06-06
  • go语言中GoMock安装使用详解

    go语言中GoMock安装使用详解

    这篇文章主要为大家介绍了go语言中GoMock安装使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Go语言MySQLCURD数据库操作示例详解

    Go语言MySQLCURD数据库操作示例详解

    这篇文章主要为大家介绍了Go语言MySQLCURD数据库操作示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Go语言--切片(Slice)详解

    Go语言--切片(Slice)详解

    这篇文章主要介绍了Go语言--切片(Slice),Go 语言切片是对数组的抽象,下面文章小编将为大家详细介绍该内容,需要的朋友可以参考下,希望对你有所帮助
    2021-10-10
  • Golang实现协程超时控制的方式总结

    Golang实现协程超时控制的方式总结

    我们知道,go协程如果不做好处理,很容易造成内存泄漏,所以对goroutine做超时控制,才能有效避免这种情况发生,本文为大家整理了两个常见的Golang超时控制方法,需要的可以收藏一下
    2023-05-05
  • Golang中四种gRPC模式举例详解

    Golang中四种gRPC模式举例详解

    gRPC是一种进程间通信技术,在微服务和云原生领域都有着广泛的应用,下面这篇文章主要给大家介绍了关于Golang中四种gRPC模式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Golang二维切片初始化的实现

    Golang二维切片初始化的实现

    这篇文章主要介绍了Golang二维切片初始化的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论