如何使用 protoreflect 在 Go protobuf 切片字段中添加一个 nil 条目?
How to add a nil entry in Go protobuf slice field with protoreflect?
我生成的 protobuf Go 结构如下所示:
type ProtoStruct {
A []*SomeStruct
}
我现在正尝试将 nil
条目附加到带有 protoreflect
的那个切片。
我试过了:
var v protoreflect.Value // somehow get this value from previous steps
v.List().Append(protoreflect.ValueOf(nil))
它恐慌:
type mismatch: cannot convert nil to message
List().Append()
的参数应该是 protoreflect.Value
,其中包含适当的类型信息。
要附加一个 typed protobuf nil
项目,你可以这样使用 protoreflect.ValueOf
:
var a *pb.SomeStruct
v.List().Append(protoreflect.ValueOf(a.ProtoReflect()))
请注意,这 不会导致 nil 指针取消引用的恐慌。 ProtoReflect()
方法调用处理接收者是 nil
;它将 return 一个适当初始化的 protoreflect.Message
包装一个 nil
值,然后您可以成功地将其传递给 ValueOf
.
我生成的 protobuf Go 结构如下所示:
type ProtoStruct {
A []*SomeStruct
}
我现在正尝试将 nil
条目附加到带有 protoreflect
的那个切片。
我试过了:
var v protoreflect.Value // somehow get this value from previous steps
v.List().Append(protoreflect.ValueOf(nil))
它恐慌:
type mismatch: cannot convert nil to message
List().Append()
的参数应该是 protoreflect.Value
,其中包含适当的类型信息。
要附加一个 typed protobuf nil
项目,你可以这样使用 protoreflect.ValueOf
:
var a *pb.SomeStruct
v.List().Append(protoreflect.ValueOf(a.ProtoReflect()))
请注意,这 不会导致 nil 指针取消引用的恐慌。 ProtoReflect()
方法调用处理接收者是 nil
;它将 return 一个适当初始化的 protoreflect.Message
包装一个 nil
值,然后您可以成功地将其传递给 ValueOf
.