简介
Google Protocol Buffer(简称ProtoBuf)是一种轻便高效的结构化数据存储格式,平台无关、语言无关、可扩展,可用于通讯协议和数据存储等领域
其他数据格式比较
- xml :数据冗余,需要成对的闭合标签,在webservice中应用最广泛;
- json :使用了键值对的方式,压缩了一定的空间,同时也具有可读性。浏览器对其格式支持十分友好,有很多内建的函数支持;
- protobuf :二进制数据格式,需要编码和解码。数据本身不具备可读性,需要反序列化后得到真正的可读数据。适合高性能、对响应速度有要求的数据传输场景
优势
- 平台无关,语言无关;
- 二进制格式,序列化后体积相比于json和xml很小,适合网络传输;
- 使用protobuf的编译器,可以方便的生成在编程中使用的数据访问代码,提供了完整详细的操作api;
- 消息格式升级和兼容性良好;
- 序列化和反序列化速度很快,快于json的反应速度
安装
自己去装
编写.proto文件
定义一个消息:
1 | syntax = "proto3”; |
编译
当使用protocol buffer编译器来运行.proto文件时,编译器将生成所选语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
对C++来说,编译器会为生成一个.proto文件生成一个.h文件和.cc文件。.proto文件中的每一个消息都有一个对应的类。对go来说,一个.proto文件会生成一个.pb.go文件
1 | ➜ ls |
使用
简单的写一个go程序调用上面编译生成的net.pb.go
1 | package main |
看看结果:
1 | request method before: GET |
上述调用的属性显示、属性修改、编码和解码方法皆定义在编译生成的net.pb.go文件中,文件中还有一些其它方法可供我们直接调用