首页 > 其他分享 >go序列化库--msgpack

go序列化库--msgpack

时间:2025-01-13 21:21:09浏览次数:1  
标签:Status msgpack -- 34 json 116 go 序列化 97

简介

msgpack是一个基于二进制高效的对象序列化类库,可用于跨语言通信。

它可以像JSON那样,在许多种语言之间交换结构对象。

但是它比JSON更快速也更轻巧。 支持Python、Ruby、Java、C/C++、Go等众多语言。

宣称比Google Protocol Buffers还要快4倍。


官方的说法

它像 JSON,
但更快、更小巧。
MessagePack 是一种高效的二进制序列化格式。

它允许您像 JSON 一样在多种语言之间交换数据,但速度更快、体积更小。

小整数被编码为单个字节,而典型的短字符串仅需在字符串本身之外额外占用一个字节。

官网

丰富的库



安装

go get github.com/vmihailenco/msgpack/v5

与json对比使用

package main

import (
	"encoding/json"
	"errors"
	"fmt"
	"github.com/vmihailenco/msgpack/v5"
	"strings"
)


type A struct {
	Title   string `json:"title" msgpack:"title"`
	Author  string `json:"author" msgpack:"author"`
	Summary string `json:"-" msgpack:"-"`                                 // 忽略这个字段
	Content string `json:"content,omitempty" msgpack:"content,omitempty"` // 当这个字段为空是,不序列化这个字段
	// 这里省略了后面跟的Status,是可以正常使用的,但是如果实现了序列化的三个方法,会导致整个结构体只有status被序列化,其他的被忽略
	Status Status `json:"status" msgpack:"status"`
}



// Status Status枚举
type Status int8

const (
	DRAFT Status = iota
	PUBLISHED
)

var (
	StatusValueMap = map[Status]string{
		DRAFT:     "DRAFT",
		PUBLISHED: "PUBLISHED",
	}
)

// 实现 MarshalJSON  对枚举值进行转化
func (sta Status) MarshalJSON() ([]byte, error) {
	if v, ok := StatusValueMap[sta]; ok {
		return []byte(`"` + v + `"`), nil
	}
	return nil, errors.New("枚举未定义")
}

// 实现 UnmarshalJSON  对枚举值进行转化
func (sta *Status) UnmarshalJSON(data []byte) error {
	s := strings.Trim(string(data), `"`)
	for k, v := range StatusValueMap {
		if v == s {
			sta = &k
			return nil
		}
	}
	return errors.New("未转化成功")
}

// 实现String方法,方便打印查看
func (sta Status) String() string {
	return StatusValueMap[sta]
}



func main() {
	a := &A{Content: "aaaa"}
	res1, err := json.Marshal(a)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v  %[1]T %d\n", res1, len(res1))
	res2, err := msgpack.Marshal(a)
	if err != nil {
		panic(err)
	}
	fmt.Printf("%+v  %[1]T %d\n", res2, len(res2))
	var b A
	if err := msgpack.Unmarshal(res2, &b); err != nil {
		panic(err)
	}
	fmt.Printf("%+v\n", b)
}

从上面的例子可以看出,与json的使用方法无异

然后序列化的标签也是一样的

运行的而结果

[123 34 116 105 116 108 101 34 58 34 34 44 34 97 117 116 104 111 114 34 58 34 34 44 34 99 111 110 116 101 110 116 34 58 34 97 97 97 97 34 44 34 115 116 97 116 117 115 34 58 34 68 82 65 70 84 34 125]  []uint8 58

[132 165 116 105 116 108 101 160 166 97 117 116 104 111 114 160 167 99 111 110 116 101 110 116 164 97 97 97 97 166 115 116 97 116 117 115 208 0]  []uint8 38
{Title: Author: Summary: Content:aaaa Status:DRAFT}

可以看到确实比json的更短

标签:Status,msgpack,--,34,json,116,go,序列化,97
From: https://www.cnblogs.com/guangdelw/p/18669460

相关文章

  • DVWA靶场CSP Bypass (漏洞绕过) 漏洞通关及源码审计
    CSPBypassCSPBypass(ContentSecurityPolicyBypass)漏洞涉及的是绕过网站部署的内容安全策略(ContentSecurityPolicy,CSP)限制,从而执行潜在的恶意操作。CSP是一种安全机制,用于防止跨站脚本(XSS)、数据注入攻击等。其通过限制网页能够加载和执行的内容来源来增强浏览器的安全性......
  • c语言——【linux】多线程编程 (内附练习及代码)
    1:开启一个线程主线程中:使用标准IO,向一个文件中写入任意数据分支线程:使用标准IO,读取该文件中的数据#include<stdio.h>#include<string.h>#include<unistd.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<p......
  • 如何获取该网站特有的加密函数
    免责声明,只是记录学习中的笔记,也是为了方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。在渗透测试的过程中,很多网站都有自己特有的加密方式,我们要插入payload时缺因为不知道该网站的加密方式而卡住。学习过程中偶然间发......
  • 高级java每日一道面试题-2025年01月12日-框架篇[Mybatis]-什么是MyBatis?
    如果有遗漏,评论区告诉我进行补充面试官:什么是MyBatis?我回答:在Java高级面试中,MyBatis是一个常见的讨论话题。以下是对MyBatis的详细解释:一、MyBatis简介MyBatis是一个开源的持久层框架,它提供了将SQL语句和Java对象进行映射的功能。MyBatis简化了JDBC的开发,减少了手......
  • 【2025最新】Onlyfans订阅只看这一篇就够了!史上最详细OnlyFans订阅教程!小白也能两分钟
    注:本文方法截至目前为止,仍然可用~1.登录onlyfans账号我们可以通过国内邮箱,如:QQ邮箱、网易163邮箱等进行注册。(如果你有谷歌、推特这些国外账号,也可以进行登录)2.订阅步骤我在另一篇文章详细写过了,有兴趣的可以去看看哦2025最新订阅指南3常见问题Q:Onlyfans是什......
  • 高级java每日一道面试题-2025年01月13日-框架篇[Spring篇]-Spring 是怎么解决循环依赖
    如果有遗漏,评论区告诉我进行补充面试官:Spring是怎么解决循环依赖的?我回答:在Java高级面试中,Spring框架如何解决循环依赖是一个重要且常见的问题。以下是对Spring解决循环依赖的详细解释:循环依赖的定义与类型循环依赖是指两个或多个Bean之间互相依赖,形成一个闭环。......
  • Python AI教程之十九:监督学习之决策树(10)超参调整
    如何在超参数调整中调整决策树决策树是机器学习中广泛用于分类和回归任务的强大模型。决策树的结构类似于决策流程图,有助于我们轻松解释和说明。然而,决策树的性能高度依赖于超参数,选择最佳超参数会显著影响模型的准确性、泛化能力和鲁棒性。在本文中,我们将探讨借助决策树调......
  • 一键开服!适合小白玩家的阿里云幻兽帕鲁快速部署教程!
    随着游戏行业的不断发展进步,越来越多的玩家选择自己搭建专属游戏联机服务器来获得更好的游戏体验。阿里云作为国内领先的云计算服务商,为玩家提供了一键部署幻兽帕鲁服务器服务。本文将详细介绍如何在阿里云快速部署搭建幻兽帕鲁(Palworld)服务器教程。阿里云幻兽帕鲁服务器快......
  • Pinokio v3.2.0 支持目前主流的大部分AI项目,操作极其简单
    这个工具全部都是免费的。我记得之前有个叫什么白的工具貌似还收费,这个基本上你听说过的AI开源项目它都有,而且还是一键安装。一个工具整合AI绘画、AI视频、AI语音,还有AI数字人的工具:AI绘画,又能AI对话、AI视频生成、AI语音生成,还能AI数字人支持Windows、Mac、Linux......
  • 2025毕设springboot 服装搭配推荐系统论文+源码
    系统程序文件列表开题报告内容研究背景随着时尚产业的蓬勃发展,个性化与多样化的服装需求日益增长,消费者在面对琳琅满目的商品时,往往难以快速找到符合自身风格与需求的搭配方案。传统的购物模式受限于时间、空间以及个人审美经验的局限,难以满足现代消费者对于高效、精准搭配......