开发学院

您的位置:首页>教程>正文

教程正文

Protocol Buffer Go实例教程:前言

  本教程翻译自谷歌开发者官网,原文地址:https://developers.google.com/protocol-buffers/docs/gotutorial。开发学院对其进行了简单的翻译,本页面的内容是根据知识共享属性3.0许可的,代码示例是根据Apache 2.0许可的。

  本教程介绍了如何通过Go语言来使用proto3版本的Protocol Buffer语言。通过创建一个简单的示例应用程序,它向您展示了以下知识点

  •   在. proto文件中定义消息格式。

  •   使用protocol buffer编译器。

  •   使用Go protocol buffer API来读写消息。

  这不是Go使用protocol buffer的全面指南。有关更详细的参考信息,请参见protocol buffer语言指南、Go应用编程接口参考、Go生成代码指南和编码参考。

为什么选择protocol buffer?

  我们将要使用的例子是一个非常简单的“地址簿”应用程序,它可以读写文件中的联系人详细信息。通讯簿中的每个人都有一个姓名、一个身份证、一个电子邮件地址和一个联系电话号码。

  如何序列化和检索这样的结构化数据?有几种方法可以解决这个问题:

  使用gobs序列化Go数据结构。在特定于Go的环境中,这是一个很好的解决方案,但是如果您需要与为其他平台编写的应用程序共享数据,它就力不从心了。

  您可以发明一种特殊的方法将数据项编码成单个字符串,例如将4个int编码为“12 : 3 : - 23 : 67”。这是一种简单而灵活的方法,尽管它确实需要编写一次性编码和解析代码,而且解析会带来很小的运行时成本。这对于编码非常简单的数据最有效。

  将数据序列化为XML。这种方法可能非常有吸引力,因为XML (某种程度上)是人类可读的,并且有许多语言的绑定库。如果您想与其他应用程序/项目共享数据,这可能是一个不错的选择。然而,众所周知,XML占用大量空间,编码/解码它会给应用程序带来巨大的性能损失。此外,导航一个XML DOM树比导航一个类中的简单字段要复杂得多。

  Protocol Buffer是精确解决这个问题的灵活、高效、自动化的解决方案。使用Protocol Buffer,您可以编写一个想要存储的数据结构的. proto描述。由此,Protocol Buffer编译器创建了一个类,该类以有效的二进制格式实现Protocol Buffer数据的自动编码和解析。生成的类为组成Protocol Buffer的字段提供了getter和setter,并作为一个单元处理读写Protocol Buffer的细节。重要的是,Protocol Buffer格式支持随着时间的推移扩展格式的想法,使得代码仍然可以读取用旧格式编码的数据。

在哪里可以找到示例代码

  我们的例子是一组命令行应用程序,用于管理使用Protocol Buffer编码的地址簿数据文件。命令add_person_go向数据文件添加一个新条目。命令列表分析数据文件并将数据打印到控制台。

  您可以在GitHub存储库的examples目录中找到完整的示例。