为了账号安全,请及时绑定邮箱和手机立即绑定

Go protobuf 中单独消息和服务定义的最佳实践?

Go protobuf 中单独消息和服务定义的最佳实践?

Go
慕勒3428872 2022-08-01 17:12:49
分离(特定于 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


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信