在 gRPC 协议缓冲区 golang 中创建 Map[string]interface{} 类型的变量
Create variable of type Map[string]interface{} in gRPC protoc buffer golang
我正在使用 grpc golang 在客户端和服务器应用程序之间进行通信。
下面是协议缓冲区的代码。
syntax = "proto3";
package Trail;
service TrailFunc {
rpc HelloWorld (Request) returns (Reply) {}
}
// The request message containing the user's name.
message Request {
map<string,string> inputVar = 1;
}
// The response message containing the greetings
message Reply {
string outputVar = 1;
}
我需要在消息数据结构中创建类型为 map[string]interface{} 的字段 inputVar,而不是 map[string]string。
我怎样才能实现它?
提前致谢。
proto3 的类型为 Any
import "google/protobuf/any.proto";
message ErrorStatus {
string message = 1;
repeated google.protobuf.Any details = 2;
}
但是如果你看一下它的实现,它就像
message Any {
string type_url = 1;
bytes value = 2;
}
您必须通过可能使用反射和中间类型来自己定义这样的消息。
虽然处理起来有点冗长,但协议缓冲区中的 "struct" 类型可能更接近于 golang 的 map[string]interface{}
但是像 interface{} 一样,需要一些反射式的开销来确定实际存储的类型是什么。
例如,请参阅此处的评论:https://github.com/golang/protobuf/issues/370
我 wrote 关于如何使用 google.protobuf.Struct
处理任意 JSON 输入的较长 post。 structpb
包能够通过其 AsMap()
函数从 structpb.Struct
生成 map[string]interface{}
。
官方文档:https://pkg.go.dev/google.golang.org/protobuf/types/known/structpb
我正在使用 grpc golang 在客户端和服务器应用程序之间进行通信。 下面是协议缓冲区的代码。
syntax = "proto3";
package Trail;
service TrailFunc {
rpc HelloWorld (Request) returns (Reply) {}
}
// The request message containing the user's name.
message Request {
map<string,string> inputVar = 1;
}
// The response message containing the greetings
message Reply {
string outputVar = 1;
}
我需要在消息数据结构中创建类型为 map[string]interface{} 的字段 inputVar,而不是 map[string]string。 我怎样才能实现它? 提前致谢。
proto3 的类型为 Any
import "google/protobuf/any.proto";
message ErrorStatus {
string message = 1;
repeated google.protobuf.Any details = 2;
}
但是如果你看一下它的实现,它就像
message Any {
string type_url = 1;
bytes value = 2;
}
您必须通过可能使用反射和中间类型来自己定义这样的消息。
虽然处理起来有点冗长,但协议缓冲区中的 "struct" 类型可能更接近于 golang 的 map[string]interface{}
但是像 interface{} 一样,需要一些反射式的开销来确定实际存储的类型是什么。
例如,请参阅此处的评论:https://github.com/golang/protobuf/issues/370
我 wrote 关于如何使用 google.protobuf.Struct
处理任意 JSON 输入的较长 post。 structpb
包能够通过其 AsMap()
函数从 structpb.Struct
生成 map[string]interface{}
。
官方文档:https://pkg.go.dev/google.golang.org/protobuf/types/known/structpb