Protobuf 将消息转换为指针

问题描述 投票:0回答:1

我有一个这样的程序->

message Action{ }

message Person{ Action action = 1; }

我希望将Person中的action字段转换为golang中的非指针结构体。但是之后 编译它会转换为 ->

type Person struct{ action *Action }

PS:我使用的是proto3。

go pointers protocol-buffers
1个回答
0
投票

该行为是正确且符合要求的。

协议缓冲区包括一项优化,其中从在线消息中删除默认值(例如,int 为 0、bool 为 false),因为这些值可能由接收者假定(省略它们可以节省空间和处理)。

推论:如果客户端在预期这些值时不包含 int、bool,则服务器假定 int 为零且 bool 为 false,反之亦然。

这种行为扩展到结构体(在 Go 中,这是由

protoc
消息编译产生的),因为 Go 中没有 null 的概念(这相当于默认值)。

为了重新创建此默认值,消息始终被编译为指向 Go 中结构的指针。

使用

protoc
无法解决此行为。

© www.soinside.com 2019 - 2024. All rights reserved.