Protocol buffers 是一种语言无关、平台无关的可扩展机制或者说是数据交换格式,用于序列化结构化数据, 与 XML、JSON 相比,Protocol buffers 序列化后的码流更小、速度更快、操作更简单, 一般可用于(数据)通信协议、数据存储等
Protobuf编译器使用的是C++实现, 我们可以通过 https://github.com/protocolbuffers/protobuf/releases自行选择需要的版本进行下载, 我这里是linux环境所以选择的是protoc-21.6-linux-x86_64.zip
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.6/protoc-21.6-linux-x86_64.zip
unzip protoc-21.6-linux-x86_64.zip -d protoc-21.6-linux-x86_64
# 打开环境变量配置文件
sudo vim /etc/profile
# 将当前安装地址配置到PATH
export PATH=$PATH:/root/protoc-21.6-linux-x86_64/bin
# 配置生效
source /etc/profile
# 查看是否安装成功
protoc version
protoc编译器元素支持java, c#, c++, python, ruby,php, objectC就是没直接支持go, 所以需要安装额外的编译插件
go get google.golang.org/protobuf/cmd/protoc-gen-go
# 查看安装的版本
protoc-gen-go --version
基于Protocol buffers 序列化后的码流更小、速度更快、操作更简单的特点, 一般我们会使用它来作为RPC协议的数据交换格式, 下面演示下如何通过pb文件生产具体的go代码为后面写RPC服务使用
//声明proto的版本 只有 proto3 才支持 gRPC
syntax = "proto3";
// 将编译后文件输出在当前目录
option go_package = "./";
// 指定当前proto文件属于helloworld包
package helloworld;
// 定义一个名叫 greeting 的服务
service Greeter {
// 该服务包含一个 SayHello 方法 HelloRequest、HelloReply分别为该方法的输入与输出
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// 具体的参数定义
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
protoc使用说明: $ protoc --proto_path=IMPORT_PATH --go_out=OUT_DIR --go_opt=paths=source_relative path/to/file.proto --proto_path:指定 import 路径,可以指定多个参数,编译时按顺序查找,默认查找当前目录。 --go_out:golang编译支持,指定输出文件路径, 其他语言则替换即可,比如 --java_out 等等 --go_opt:指定参数,比如--go_opt=paths=source_relative就是表明生成文件输出使用相对路径。 path/to/file.proto :被编译的 .proto 文件放在最后面
根据使用说明, 我们进入到当前hello_world.proto
所在目录直接执行
protoc --go_out=. hello_world.proto
最终在当前目录看到生成的hello_world.pb.go
文件
protoc 的编译过程主要分成两个步骤:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。