分離(特定于 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 關注
- 145 瀏覽
添加回答
舉報
0/150
提交
取消