Google Protocol Buffers学习笔记

本文介绍了Google Protocol Buffers(ProtoBuf)的学习过程,包括背景、安装、编码实践及遇到的问题。ProtoBuf作为高效的二进制传输载体,具有规范化的接口定义和自动生成解析代码的优点,但其以.proto文件定义接口、需要编译和特定语言限制也带来一定复杂性。作者通过实例展示了如何使用ProtoBuf进行序列化和反序列化,并对官方文档的更新和中文支持表达了看法。
摘要由CSDN通过智能技术生成

背景

最近由于工作需要,需要做一些IDL的事情,参考对象就是Google Protocol Buffers。学习的过程中做一些记录

介绍

官方文档:https://developers.google.com/protocol-buffers/

Github:https://github.com/protocolbuffers/protobuf/tree/master/python

安装

安装其实比较简单,按照步骤安装就好了,Mac自带的Python就可以直接支持,但是有几个坑需要注意

  • Protocol Buffers现阶段的安装包没有configure文件,需要自己打包

Github上下载下源码之后,需要运行./autogen.sh来自行生成configure文件。

  • 生成configure的过程中报错autoconf不存在
brew install autoreconf
brew install automake
brew install libtool

brew直接安装这三个东西即可解决

  • 运行python setup.py install后依然会报错google not found

这个报错是比较奇怪,一般来说会直接把依赖包安装完毕,但是我这里确实是遇到了这个坑,解决办法是直接手工安装google

sudo pip install protobuf
sudo pip install google

参考官方文档撸码

具体的过程就不记录了,基本上完全照搬官方文档的代码,记录几个坑。

proto文件的版本标识

syntax = "proto2";在协议文件的最上方需要标识出版本号,2和3是有一些区别的:

  • 3中不需要定义requireoptional,只有repeat声明仍然保留
  • 3中自带默认值,不能自定义默认值,这样在序列化的时候就可以节省空间
  • 3中支持map的编写
  • 3中支持json的映射
编写的记录

首先要根据协议生成一个Python对象。比如addressbook_pb2。有兴趣的可以直接去看这个类的内容,基本上是定义一些空类和方法的声明,具体的操作API还是参考官方的说明比较靠谱。

Python操作Protocol Buffers的时候,有几个注意点。

  • 操作repeat对象

repeat对象在Python中的对应可以理解为是数组。如果需要新增一个数组元素的话,需要这样调用

phone_number = person.phones.add()
phone_number.number = number
phone_number.type = addressbook_pb2.Person.MOBILE

说实话,并不太符合Python优雅的语法。如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点点寒彬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值