2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布


🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布
      • 📜 摘要
      • 🚀 引言
      • 🌐 正文内容
        • 🌟 新API的动机
        • 📚 反射的实现
        • 🔄 API版本
        • 🌱 额外的新特性
        • 📈 总结知识要点
      • 📌 总结
      • 🔮 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布

📜 摘要

嗨,我是猫头虎,热衷于分享最新的技术动态。今天,我们来聊聊Go的一个重大更新——Go协议缓冲区(Protocol Buffers)的全新API。这是一个跨时代的改进,为Go开发者提供了更强大、更灵活的数据交换格式处理能力。让我们深入了解它的动机、特性和实现吧!

🚀 引言

2020年3月2日,Go团队宣布了对Go协议缓冲区API的重大修订发布。这是Google通用的、语言中立的数据交换格式的新阶段。自2010年首次推出以来,这个包随着Go的发展而发展,其用户需求也日益增长。新API的发布标志着对现有API的一个重大改进,旨在解决过去十年中出现的一系列问题。

🌐 正文内容

🌟 新API的动机

新API的开发是基于以下几点考虑:

  • 反射的需求:许多人希望编写程序,使用反射来检查协议缓冲区消息。但现有的reflect包在协议缓冲区类型系统中遗漏了信息。
  • 自定义数据结构的需求:用户希望使用除了协议缓冲区编译器生成的数据结构之外的其他结构,如动态消息类型。
  • proto.Message接口的问题:这个接口对于生成的消息类型的行为描述很少,导致使用时程序崩溃或行为不可预测。
📚 反射的实现

新实现的旗舰功能是反射。类似于reflect包为Go类型和值提供视图,google.golang.org/protobuf/reflect/protoreflect包为协议缓冲区类型系统提供了值的视图。

例如,我们可以定义一个.proto文件来标注字段是否包含敏感信息,然后编写Go函数来移除所有敏感字段。这个过程展示了协议缓冲区反射的实际应用。

🔄 API版本

原始版本的Go协议缓冲区被称为APIv1,新的为APIv2。APIv2与APIv1不兼容,因此需要使用不同的模块路径。

  • github.com/golang/protobuf 是APIv1。
  • google.golang.org/protobuf 是APIv2。
🌱 额外的新特性
  • protojson包:将协议缓冲区消息转换为JSON。
  • dynamicpb包:为运行时派生的协议缓冲区类型提供proto.Message的实现。
  • protocmp包:提供比较协议缓冲区消息的功能。
  • protogen包:支持编写协议编译器插件。
📈 总结知识要点
要点描述
反射实现新API提供了

协议缓冲区类型系统的反射能力。 |
| API版本变化 | 引入了APIv2,与APIv1不兼容,使用不同的模块路径。 |
| 新特性 | 包括protojsondynamicpbprotocmpprotogen等。 |
| 目的与目标 | 提高API的效用,解决APIv1的不足,保持APIv1的支持。 |

📌 总结

这次对Go的协议缓冲区API的重大修订,不仅提供了先进的反射能力和定制消息实现,还清理了API表面,使其更加整洁。我们的目标是在保留旧API的优点的同时,解决其不足之处。本文已被猫头虎的Go生态洞察专栏收录,详情点击这里。

🔮 下一篇预告

敬请期待我的下一篇文章,我们将探讨“Go、Go社区和大流行病”,深入了解Go在这个特殊时期的发展和社区的响应。不要错过!�

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179258.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何轻松将 4K 转换为 1080p 高清视频

由于某些原因,你可能有一些 4K 视频,与1080p、1080i、720p、720i等高清视频相比,4K 视频具有更高的分辨率,可以给您带来更多的视觉和听觉享受。但是,播放4k 视频是不太容易的,因为超高清电视没有高清电视那…

C#面向对象

过程类似函数只能执行没有返回值 函数不仅能执行,还可以返回结果 1、面向过程 a 把完成某一需求的所有步骤 从头到尾 逐步实现 b 根据开发需求,将某些 功能独立 的代码 封装 成一个又一个 函数 c 最后完成的代码就是顺序的调用不同的函数 特点 1、…

【问题系列】消费者与MQ连接断开问题解决方案(二)

1. 问题描述 当使用RabbitMQ作为中间件,而消费者为服务时,可能会出现以下情况:在长时间没有消息传递后,消费者与RabbitMQ之间出现连接断开,导致无法处理新消息。解决这一问题的方法是重启Python消费者服务,…

大数据平台/大数据技术与原理-实验报告--部署ZooKeeper集群和实战ZooKeeper

实验名称 部署ZooKeeper集群和实战ZooKeeper 实验性质 (必修、选修) 必修 实验类型(验证、设计、创新、综合) 综合 实验课时 2 实验日期 2023.11.04-2023.11.05 实验仪器设备以及实验软硬件要求 专业实验室&#xff08…

Spring Boot 3.2.0 Tomcat虚拟线程初体验 (部分装配解析)

写在前面 spring boot 3 已经提供了对虚拟线程的支持。 虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为 “虚拟”。这种解耦是由 JVM 提供的抽象层赋予的。 虚拟线程的运行成本远低于平…

如何使用APP UI自动化测试提高测试效率与质量?

pythonappium自动化测试系列就要告一段落了,本篇博客咱们做个小结。 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还…

C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2022 版本 17.6.5 文章目录 🌇前言🏙️正文1.右值引用1.1.什么是右值引用?1.2.move 转移资源1.3.左值引用 vs …

CSS问题:如何实现瀑布流布局?

前端功能问题系列文章,点击上方合集↑ 序言 大家好,我是大澈! 本文约2500字,整篇阅读大约需要4分钟。 本文主要内容分三部分,如果您只需要解决问题,请阅读第一、二部分即可。如果您有更多时间&#xff…

JavaEE进阶学习:Bean 作用域和生命周期

1.Bean 作用域 .通过一个案例来看 Bean 作用域的问题 假设现在有一个公共的 Bean,提供给 A 用户和 B 用户使用,然而在使用的途中 A 用户却“悄悄”地修改了公共 Bean 的数据,导致 B 用户在使用时发生了预期之外的逻辑错误。 我们预期的结果…

colab notebook导出为PDF

目录 方法一:使用浏览器打印功能 方法二:使用nbconvert转换 方法三:在线转换 方法一:使用浏览器打印功能 一般快捷键是CTRLP 然后改变目标打印机为另存为PDF 这样就可以将notebook保存为PDF了 方法二:使用nbconver…

芯片技术前沿:了解构现代集成电路的设计与制造

芯片技术前沿:解构现代集成电路的设计与制造 摘要:本文将深入探讨芯片技术的最新进展,重点关注集成电路的设计与制造。我们将带领读者了解芯片设计的基本流程,包括电路分析、版图设计和验证等步骤,并介绍当前主流的制…

强化学习中的深度Q网络

深度 Q 网络(Deep Q-Network,DQN)是一种结合了深度学习和强化学习的方法,用于解决离散状态和离散动作空间的强化学习问题。DQN 的核心思想是使用深度神经网络来近似 Q 函数,从而学习复杂环境中的最优策略。 以下是 DQN…

从苹果到蔚来,「车手互联」网罗顶级玩家

作者 |Amy 编辑 |德新 汽车作为家之外的第二大移动空间,正与手机这一移动智能终端进行「车手互联」。 车手互联始于十年前的苹果CarPlay,一度成为时代弄潮儿,不断有后继者模仿并超越。时至今日,CarPlay2.0依旧停留在概念阶段&am…

RK3568笔记六:基于Yolov8的训练及部署

若该文为原创文章,转载请注明原文出处。 基于Yolov8的训练及部署,参考鲁班猫的手册训练自己的数据集部署到RK3568,用的是正点的板子。 1、 使用 conda 创建虚拟环境 conda create -n yolov8 python3.8 ​ conda activate yolov8 2、 安装 pytorch 等…

osgFX扩展库-异性光照、贴图、卡通特效(1)

本章将简单介绍 osgFX扩展库及osgSim 扩展库。osgFX库用得比较多,osgSim库不常用,因此,这里只对这个库作简单的说明。 osgFX扩展库 osgFX是一个OpenSceneGraph 的附加库,是一个用于实现一致、完备、可重用的特殊效果的构架工具,其…

UE 事件分发机制 day9

观察者模式原理 观察者模式通常有观察者与被观察者,当被观察者状态发生改变时,它会通知所有的被观察者对象,使他们能够及时做出响应,所以也被称作“发布-订阅模式”。总得来说就是你关注了一个主播,主播的状态改变会通…

Fabric:搭建自定义网络

Hyperledger Fabric: V2.5.4 写在最前 从本篇博客开始,将陆续介绍使用Fabric搭建自定义网络及部署执行链码的过程。本篇主要介绍如何搭建网络。   由于前文在安装Fabric的时候,已经将目录fabric-samples/bin加入到了环境变量PATH中,所以正文…

数据结构 / day01 作业

1.定义结构体数组存储5个学生的信息:姓名,年龄,性别 定义函数实现输入,要求形参使用结构体指针接收 函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息) 定义函数实现输出,要求形参使用结构体…

(5h)Unity3D快速入门之Roll-A-Ball游戏开发

DAY1:Unity3D安装 链接 DAY2:构建场景,编写代码 链接 内容:WASD前后左右移动、摄像机跟随 DAY3:待更新 DAY4:待更新 DAY5:待更新