我有来自数据库的数据是json.RawMessage
。特定列是jsonb。
我真的找不到一种方法来将数据解组到一个在proto中定义为protobuf的属性中。
repeated google.protobuf.Any list = 1;
当我尝试使用json.Unmarshal()
从数据库中解组数据时,list
是空的。
foo := &pb.Foo{...}
any, err := anypb.New(foo)
if err != nil {
...
}
...
foo := &pb.Foo{}
if err := any.UnmarshalTo(foo); err != nil {
...
}
但是在这个例子中,foo
的类型是proto.Message
,我不能转换它,因为我有json.RawMessage
。
有什么办法我可以做到这一点吗?
1条答案
按热度按时间k3bvogb11#
首先,您应该了解DB列中存储了什么。
json.RawMessage
被简单地定义为type RawMessage []byte
(参见文档)。它没有携带足够的信息来回答您的问题。我将提供一个演示来展示
google.protobuf.Any
是如何工作的,这将有助于您更好地理解您的问题。备注:
Foo
和Bar
)。Any
消息类型允许您将消息用作嵌入类型,而无需其.proto定义。Any包含任意序列化消息(以字节表示),沿着充当该消息的全局唯一标识符并解析为该消息类型的URL。1.实际上,您的问题取决于DB中存储的内容。请参见
main.go
中的注解。演示的文件夹结构:
go.mod
:pb/demo.proto
:main.go
:运行演示的步骤: