我应该使用 Get 方法来获取值还是应该直接使用字段?

Fre*_*ors 0 go protocol-buffers proto protoc

我第一次在 Go 中使用 protobuf(和 protoc)。

message MyProtoStruct {
  string description = 1;
}
Run Code Online (Sandbox Code Playgroud)

我有点困惑:

  1. 我应该使用方法来获取值(如MyProtoStruct.GetDescription())还是

  2. 我应该直接使用字段(如MyProtoStruct.Description)吗?

Pau*_*kin 6

你可以使用。请注意,对于 proto2 生成的代码而不是 proto3(proto2 是默认值),协议缓冲区消息中的字段始终是指针。在这种情况下,如果字段为 nil,则 getter 返回零值。这非常方便,因为很难编写直接使用字段的代码,而不会在缺少字段时导致 nil 指针取消引用。

proto3生成的代码中(我建议您使用,原因不止一个),我建议您直接使用字段。在 proto2 生成的代码中,我建议使用 get 方法。

  • 很高兴在官方文档中看到这个答案和/或了解为什么直接字段访问优于在 proto3 中使用 getter 的原因。因为很难说没有理由就不应该使用吸气剂(在协作环境中)。其次,还有一个问题,如果不推荐使用 getter,为什么要在 proto3 中添加 getter?是因为向后兼容还是其他原因? (6认同)
  • proto3中直接使用字段有什么好处? (5认同)