前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布

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

作者头像
猫头虎
发布2024-04-09 14:34:54
770
发布2024-04-09 14:34:54
举报

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不兼容,因此需要使用不同的模块路径。

🌱 额外的新特性
  • protojson包:将协议缓冲区消息转换为JSON。
  • dynamicpb包:为运行时派生的协议缓冲区类型提供proto.Message的实现。
  • protocmp包:提供比较协议缓冲区消息的功能。
  • protogen包:支持编写协议编译器插件。
📈 总结知识要点

要点

描述

反射实现

新API提供了

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

📌 总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布
    • 📜 摘要
      • 🚀 引言
        • 🌐 正文内容
          • 📌 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档