英文:
Should I use Get methods to get values or should I use fields directly?
问题
我第一次使用Go语言的protobuf(和protoc)。
message MyProtoStruct {
string description = 1;
}
我有点困惑:
-
我应该使用方法来获取值(例如
MyProtoStruct.GetDescription()
),还是 -
我应该直接使用字段(例如
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:
-
should I use methods to get values (like
MyProtoStruct.GetDescription()
) or -
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论