码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • protolator简介


    合集 - Golang学习(34)
    1.iota简介07-102.go generate命令简介07-113.golang uuid库介绍07-244.gRPC基本教程07-25
    5.protolator简介07-31
    6.Govulncheck v1.0.0 发布了!08-037.每日一库:GORM简介08-078.Go泛型简介08-099.Go 1.21发布!08-1010.Golang zip压缩文件读写操作2020-12-2311.本地搭建playground2021-01-1712.zap自定义日志级别02-0913.Gorm日志设置02-0914.gin启动https支持2022-11-3015.Go Plugin介绍2021-12-1416.Golang漏洞管理07-3017.可以丢掉123456了07-0418.如何优雅地退出程序06-2719.PGO前瞻06-2520.go多版本管理05-1621.openAI发布v0.2.0了05-1122.Gin中间件开发08-1123.Fabric区块链浏览器(1)08-1524.每日一库:Memcache08-1725.protojson简介08-1826.每日一库:gosec08-2127.Fabric区块链浏览器(2)08-2228.每日一库:fsnotify简介08-2629.gRPC with JWT08-2730.embed简介08-2931.Fabric区块链浏览器(3)08-3032.每日一库:pprof简介09-0133.go 1.21:cmp09-0234.完全可复制、经过验证的 Go 工具链09-05
    收起

    github.com/hyperledger/fabric-config/protolator 是 Hyperledger Fabric 中的一个 Go 包,用于将 Protocol Buffers(ProtoBuf)消息和 JSON 格式之间进行转换。它提供了一种方便的方式来将 Fabric 配置文件(以 ProtoBuf 格式表示)与 JSON 配置文件之间进行相互转换。这对于 Fabric 的配置管理和部署非常有用,使得用户可以轻松地在不同的配置格式之间进行切换。

    功能和用法

    protolator 提供了一组功能,用于在 ProtoBuf 格式和 JSON 格式之间进行转换:

    DeepMarshalJSON

    func DeepMarshalJSON(m proto.Message) ([]byte, error)

    • 该方法用于将给定的 ProtoBuf 消息 m 转换为 JSON 格式的字节流。
    • 它递归地将 ProtoBuf 的消息及其子消息转换为 JSON 格式,返回表示 JSON 格式数据的字节流。
    • 注意:转换后的 JSON 字节流将具有缩进格式,易于阅读。

    DeepUnmarshalJSON

    func DeepUnmarshalJSON(data []byte, m proto.Message) error

    • 该方法用于将给定的 JSON 格式字节流 data 转换为指定的 ProtoBuf 消息 m。
    • 它递归地将 JSON 格式的数据解析并填充到 m 中,返回 nil 或错误。
    • 注意:JSON 字节流必须是有效的,并且与目标消息 m 的结构相匹配。

    Nested

    type Nested struct{...}

    • Nested 类型是用于 ProtoBuf 和 JSON 之间可嵌套转换的通用转换器。
    • 它提供了 Marshal 和 Unmarshal 方法,用于将 ProtoBuf 格式的消息转换为可嵌套的 JSON 格式,以及将可嵌套的 JSON 格式转换为 ProtoBuf 格式。

    使用示例

    package main
    import (
    "fmt"
    "github.com/golang/protobuf/proto"
    "github.com/hyperledger/fabric-config/protolator"
    "encoding/json"
    )
    // 使用 proto 文件定义的 message 结构
    // 假设定义了 proto 文件如下:
    // message MyData {
    // string name = 1;
    // int32 age = 2;
    // }
    type MyData struct {
    Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
    Age int32 `protobuf:"varint,2,opt,name=age" json:"age,omitempty"`
    }
    func main() {
    // 创建一个 MyData 实例
    data := &MyData{
    Name: "John",
    Age: 30,
    }
    // 使用 DeepMarshalJSON 将 ProtoBuf 数据转换为 JSON 字节流
    jsonData, err := protolator.DeepMarshalJSON(data)
    if err != nil {
    fmt.Println("Error marshaling to JSON:", err)
    return
    }
    // 使用 DeepUnmarshalJSON 将 JSON 字节流转换为 ProtoBuf 数据
    newData := &MyData{}
    err = protolator.DeepUnmarshalJSON(jsonData, newData)
    if err != nil {
    fmt.Println("Error unmarshaling from JSON:", err)
    return
    }
    // 输出结果
    fmt.Println("Original data:", data)
    fmt.Println("JSON data:", string(jsonData))
    fmt.Println("Unmarshaled data:", newData)
    }

    在上述示例中,我们使用 github.com/hyperledger/fabric-config/protolator 的 DeepMarshalJSON 方法将 MyData 结构体从 ProtoBuf 格式转换为 JSON 格式的字节流,并使用 DeepUnmarshalJSON 方法将 JSON 字节流再转换回 ProtoBuf 格式的数据。输出结果显示了原始数据、转换后的 JSON 数据以及再次转换回来后的数据。


    孟斯特

    声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
    Author: mengbin
    blog: mengbin
    Github: mengbin92
    cnblogs: 恋水无意


  • 相关阅读:
    Nginx配置文件详解
    基于JAVA+SpringMVC+Mybatis+MYSQL的影视网站
    学编程:Python入门考级必备[8]
    每日一练 | 华为认证真题练习Day118
    JS中内置的日期类Date,显示系统时间、停止系统时间
    Fiddler抓取手机app包
    MySQL 慢查询
    RSIC-V指令及介绍(1)
    SpringBoot日志相关进阶配置
    python使用moviepy剪切合并视频以及视频降噪
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/17593002.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号