protocol-buffers - 引用外部 protos,如 google/rpc/status.proto

标签 protocol-buffers

我想知道如何正确引用外部原型(prototype)文件。假设我有一个引用标准 protobuf 类型的 .proto 文件,例如 Timestamp :

syntax = "proto3";
package api;

import "google/protobuf/timestamp.proto";

message ServerTimeResponse {
  google.protobuf.Timestamp ts = 1;
}
简单的。编译时时间戳自动可用。
现在我添加一个外部
输入,比如说 google.rpc.Status :
syntax = "proto3";
package api;

import "google/protobuf/timestamp.proto";
import "google/rpc/status.proto";

message ServerTimeResponse {
  google.protobuf.Timestamp ts = 1;
  google.rpc.Status status = 2;
}
当然要告诉protoc如何通过 -I 找到该文件所在的位置/--proto_path .
我的问题是:实际引用这个文件的最佳实践是什么,特别是让版本控制满意?似乎没有 go mod相当于protobufs。我已经看到它逐字复制到项目中(例如在 grpc-gateway 中)或者只是从本地文件系统中引用。

最佳答案

我想你在这里回答了你自己的问题。我都成功地完成了:手动逐字复制必要的文件(从 https://github.com/googleapis/googleapis/tree/master/googlehttps://github.com/protocolbuffers/protobuf/tree/master/src/google/protobuf ),并引用文件的本地副本。

如果您想这样做并使版本控制满意,您可以将这两个存储库添加为 git submodules在您的存储库中。只要确保将正确的位置传递给 protoc使用 -I .例如。:

cd $PROJECT_DIR
mkdir third_party && cd third_party
git submodule add https://github.com/googleapis/googleapis/tree/master/google
cd $PROJECT_DIR
<git commit the change>
protoc -I third_party/google <the rest of your protoc command>

至于引用文件的本地副本,并在尝试构建之前确保它们存在,您可能会发现在 Makefile 中添加类似以下内容会有所帮助(这是在 Go 构建环境中):
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/golang/protobuf/protoc-gen-go
grpc_gateway_path=$(go list -m -f '{{.Dir}}' github.com/grpc-ecosystem/grpc-gateway)
googleapis_path="$grpc_gateway_path/third_party/googleapis"
protoc -I $googleapis_path --go_out=. <list of input files>

关于protocol-buffers - 引用外部 protos,如 google/rpc/status.proto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60878404/

相关文章:

c++ - 使用来自 streambuf 的 boost::asio::ip::tcp 将数据部分写入 TCP 套接字

c# - protobuf-net继承

c# - 如何知道 WCF 服务是否使用 protobuf-net?

c++ - 无法在 ROS 中使用本地安装的 Protocol Buffers

c# - ProtoInclude 属性是什么意思(在 protobuf-net 中)

c# - 异步Telnet服务器数据接收问题

hadoop - 如何使用SequenceFileInputFormat将字节数组序列化为本地文件

.net - protobuf.net v2 准备好用于生产了吗?

c# - Windows Phone 7 的 Protocol Buffer 网络

c# - Proto Buffers 不以可读格式存储数据