在Protobuf中,“任意字段”由数据缓冲区和描述底层格式的typeURL组成。
问题:如果我想在我的任意字段中输入一个String,正确的typeURL是什么?
答案 0 :(得分:0)
最近我也遇到了同样的问题,但是,在阅读了文档之后,恐怕我们的方向是错误的,正如doc of Any所说的
Any
包含任意序列化的协议缓冲区消息以及一个 描述序列化消息类型的URL。
看到了吗?它旨在保留一条消息。由于string
根本不是一条消息,因此您应该设计一条新消息,并使字符串成为消息的唯一字段。
message ExampleString {
string TheField = 1
}
答案 1 :(得分:0)
字符串url类型应为npm run test
说您的信息是
type.googleapis.com/google.protobuf.StringValue
然后您可以使用以下字符串值生成AnyValue:
message Person {
google.protobuf.Any any_value = 1;
}
将打印如下内容:
import (
"github.com/golang/protobuf/ptypes/wrappers"
"github.com/golang/protobuf/ptypes"
"github.com/golang/protobuf/jsonpb"
)
A := &wrappers.StringValue{Value: "Hello!"}
any, err := ptypes.MarshalAny(A)
p := &pb.Person{
AnyValue: any,
}
m := jsonpb.Marshaler{}
result, err := m.MarshalToString(p)
fmt.Println(result)
其他原始包装器在这里:https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto
注意:请确保在您的主容器中导入包装器
{anyValue":{"@type":"type.googleapis.com/google.protobuf.StringValue","value":"Hello!"}}