分离(特定于 Go 的)协议缓冲区中服务中使用的消息声明的最佳做法是什么?上下文是具有多个 gRPC 服务的大型应用程序。某些消息在多个服务中使用。我们的想法是划分消息和服务的定义,就像这样(简化一点):airline/pb/airline_messages.proto:syntax = "proto3";option go_package = "github.com/example.com/example-repo/airline/pb";message Airline { string code = 1; string name = 2; string country = 3;}airline/pb/airline_services.proto:syntax = "proto3";option go_package = "github.com/example.com/example-repo/airline/pb";import "airline/pb/airline_messages.proto"service AirlineService { rpc GetAirline(string) returns (Airline) {} rpc GetAirlines(GetAirlinesRequest) returns (repeated Airline) {}}message GetAirlinesRequest { int max = 1; string country = 2; string pattern = 3; string sortby = 4;}我这样打电话:protocprotoc --go_out=. \ --go_opt=paths=source_relative \ --go-grpc_out=. \ --go-grpc_opt=paths=source_relative \ --proto_path=. \ --proto_path=../../ airline_services.proto这不起作用,因为未定义。像这样调用它:Airlineprotoc ... airline_services.proto airline_messages.proto生成一条错误消息,即航空公司被乘以定义。这样做:protoc ... airline_messages.protoprotoc ... airline_services.proto只是覆盖了Go文件,相当于编译。airline_services.proto能够在多个服务中重用消息定义的最佳实践是什么?
1 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
不确定它是否有帮助,或者您是否正在使用不同版本的Go生成器。
我在一个目录中有多个*.proto文件。其中一些导入其他:
部分导入:device.protostatus.proto
syntax = "proto3";
package somePackage;
import "status.proto";
option go_package = "goPackageName";
service Device {
rpc GetStatus (GetStatusRequest) returns (Status) {}
}
message GetStatusRequest {
// ...
}
包含消息:status.protoStatus
syntax = "proto3";
package somePackage;
option go_package = "goPackageName";
message Status {
int32 customer = 1;
string device_id = 2;
// ...
}
我用以下命令生成 Go 代码:
protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative *.proto
注意:我仍然使用旧的Go protobuf。github.com/golang/protobuf
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报
0/150
提交
取消