Golang ProtoBuf笔记
什么是protobuf
protobuf(Google Protocol Buffers) 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码,本篇只讲述 Golang 的基础操作。ProtoBuf 所生成的二进制文件在存储效率上比 XML 高 3
10 倍,并且处理性能高 12 个数量级,这也是选择 ProtoBuf 作为序列化方案的一个重要因素之一。
项目地址
https://github.com/golang/protobuf
安装protobuf
- 直接安装
从 https://github.com/google/protobuf/releases 下载最新版本。例如 Mac 机器下载 osx 版本
Mac 中默认的 go root 地址为 ++/usr/local/go++,将解压缩出来的 protoc 可执行文件 copy 到 /usr/local/go/bin 下。
执行
1 | $ protoc --version |
1 | Will:bin zhuangweiming$ protoc --version |
编译安装
- 从 https://github.com/google/protobuf/releases 下载最新版本,++protobuf-all-3.5.1.tar.gz++。
- 解压缩,在终端执行:tar zxvf protobuf-all-3.5.1.tar.gz
- 进入文件目录,在终端执行:cd protobuf-3.5.1/
- 执行配置,在终端执行:./configure
- 编译,在终端执行:make
- 检测编译,在终端执行:make check
- 安装 protoc,在终端执行:make install
执行
1 | Will:bin zhuangweiming$ protoc --version |
显示 libprotoc 3.5.1 则为成功。
安装 ProtoBuf 相关的 golang 依赖库。获取 goprotobuf 提供的支持库,包含诸如编码(marshaling)、解码(unmarshaling)等功能。
$ go get -u github.com/golang/protobuf/{protoc-gen-go,proto}
使用
1.创建 protocDemo golang工程
2.在 example 包中编写 person.proto
1 | syntax = "proto3"; |
3.进入 Demo 工程的 example 目录,使用 protoc 编译 person.proto
1 | $ protoc --go_out=. person.proto |
4.在 golang 工程中使用 protobuf 进行序列化与反序列化
1 | package main |
console 输出:
1 | [26/32]0xc4200140e0 |