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

huangapple go评论90阅读模式
英文:

Should I use Get methods to get values or should I use fields directly?

问题

我第一次使用Go语言的protobuf(和protoc)。

message MyProtoStruct {
  string description = 1;
}

我有点困惑:

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

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

英文:

I'm using protobuf (and protoc) for the first time with Go.

message MyProtoStruct {
  string description = 1;
}

I'm a little bit confused:

  1. should I use methods to get values (like MyProtoStruct.GetDescription()) or

  2. should I use fields directly (like MyProtoStruct.Description)?

答案1

得分: 9

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

在生成的 proto3 代码中(出于多个原因,我建议您使用 proto3),我建议直接使用字段。在生成的 proto2 代码中,我建议使用 getter 方法。

英文:

You can use either. Note that for proto2 generated code rather than proto3 (proto2 is the default), fields in protocol buffer messages are always pointers. In that case, the getters return a zero value if the field is nil. That's very convenient, since it's quite difficult to write code that uses fields directly without causing nil pointer dereferences when a field is missing.

In proto3 generated code (which I'd suggest you use, for more than one reason), I'd suggest you use fields directly. In proto2 generated code, I'd suggest using the get methods.

huangapple
  • 本文由 发表于 2021年7月3日 19:29:50
  • 转载请务必保留本文链接:https://go.coder-hub.com/68235859.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定