Protocol Buffers学习
# Protocol Buffers学习
# 1、什么是Protocol Buffers?
Protocol Buffers(简称 Protobuf)是由谷歌开发的一种用于序列化结构化数据的方法。它是一种语言中立、平台中立、可扩展的机制,用于高效地序列化数据格式
定义:
- 是一种轻便高效的序列化结构化数据协议
- 通常用在存储数据和需要远程数据通信的程序上
目的:
- 加速站点之间数据传输速度
- 解决数据传输不规范问题
# 2、编译器
Protobuf 提供了一个编译器 protoc,可以将 .proto 文件编译成不同编程语言的代码(如 C++、Java、Python、Go 等),以便在程序中使用这些数据结构。
protoc安装
wget
https://github.com/protocolbuffers/protobuf/releases/download/v27.1/protoc-27.1-linux-x86_64.zip
unzip protoc-27.1-linux-x86_64.zip
mv bin/protoc /usr/local/bin
1
2
3
4
2
3
4
用protoc --version
检查是否安装成功
# 3、插件
protocol buffer编译器需要一个插件来根据提供的proto文件生成代码,应对不同的语言或者框架我们要下载对应的插件才能生成其代码
golang插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
1
grpc插件
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
1
micro插件
go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest
1
# 4、Protocol Buffers 常用概念
- Message:描述一个请求或响应的消息格式
- 字段标识:消息的定义中,每个字段都有一个唯一的数值标签
- 常用数据类型:double,float,int32/64,bool,string,bytes
- Service服务定义:在Service中可以定义一个RPC服务接口
例如:
syntax = "proto3";
package book;
// 声明生成Go代码的导入路径(import path)
option go_package = "./book";
message Price {
int64 market_price = 1; // 建议使用下划线的命名方式
int64 sale_price = 2;
}
service BookService{
rpc Sell(Price) returns (Price);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 5、代码生成
# 目录结构
demo
└── proto
└── book
└── price.proto
1
2
3
4
2
3
4
# 生成命令
生成go代码
protoc --proto_path=proto --go_out=proto book/price.proto
1
--proto_path=proto
表示从proto目录下读取proto文件。--go_out=proto
表示生成的Go代码保存的路径。
生成grpc代码
protoc --proto_path=proto\
--go_out=proto\
--go-grpc_out=proto\
book/price.proto
1
2
3
4
2
3
4
生成micro代码
protoc --proto_path=proto\
--micro_out=proto\
--go_out=proto\
book/price.proto
1
2
3
4
2
3
4
上次更新: 2024/07/08, 18:19:51