我有一个这样的程序->
message Action{ }
message Person{ Action action = 1; }
我希望将Person中的action字段转换为golang中的非指针结构体。但是之后 编译它会转换为 ->
type Person struct{ action *Action }
PS:我使用的是proto3。
该行为是正确且符合要求的。
协议缓冲区包括一项优化,其中从在线消息中删除默认值(例如,int 为 0、bool 为 false),因为这些值可能由接收者假定(省略它们可以节省空间和处理)。
推论:如果客户端在预期这些值时不包含 int、bool,则服务器假定 int 为零且 bool 为 false,反之亦然。
这种行为扩展到结构体(在 Go 中,这是由
protoc
消息编译产生的),因为 Go 中没有 null 的概念(这相当于默认值)。
为了重新创建此默认值,消息始终被编译为指向 Go 中结构的指针。
使用
protoc
无法解决此行为。