1

我生成的 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))

它惊慌失措:

类型不匹配:无法将 nil 转换为消息

4

1 回答 1

0

to 的参数List().Append()应该是protoreflect.Value带有适当类型信息的 a。

要附加类型化的protobufnil项,您可以protoreflect.ValueOf这样使用:

var a *pb.SomeStruct
v.List().Append(protoreflect.ValueOf(a.ProtoReflect()))

请注意,这不会导致 nil 指针取消引用的恐慌ProtoReflect()方法调用处理接收者是nil; 它将返回一个适当初始化protoreflect.Message的包装nil值,然后您可以成功地将其传递给ValueOf.

于 2022-01-15T21:00:11.190 回答