我是 Go 中 gRPC 的新用户。
我已经完成了关于客户端流API的代码。现在我有一个问题。
据我所知,我们必须在proto文件中定义消息结构,然后协议(protocol)基于这个定义的消息结构来生成代码。就我而言,protoc 生成 Go 代码。但这个过程限制了客户端或服务器重用API。例如,使用客户端流API,首先,客户端使用该API将温度数据发送到服务器。那么如果客户端想要向服务器发送GPS坐标,则必须重新定义消息结构,因为温度的结构与GPS坐标的结构不同。但出于同样的目的,向服务器发送数据。
syntax = "proto3";
package calculator;
option go_package="calculatorpb";
message TemperatureRequest{
float num =1;
}
message TemperatureResponse{
float result =1;
}
message CoordinatesRequest{
float long =1;
float lat =1;
}
message CoordinatesResponse{
float result =1;
}
service CalculatorService{
rpc Temperature(stream AverageRequest) returns (AverageResponse){} //client streaming for temperature
rpc Coordinates(stream CoordinatesRequest) returns (CoordinatesResponse){} //client streaming for Coordinates
}
好像不太方便。
那么,客户端如何在 go 中使用 gRPC 的动态消息结构呢?
如果是,请给我一个客户端流 API 的示例。
最佳答案
使用Any
消息类型:
syntax = "proto3";
import "google/protobuf/any.proto";
message Example {
string id = 1;
google.protobuf.Any message = 2;
}
使用Any
,您可以使用任何用户定义的原型(prototype)消息,同时您还需要使用一些常见的存储库或注册表与客户端共享新的原型(prototype)消息。
关于go - gRPC GO 中动态定义的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66785776/