如何更新嵌套的protobuf字段



我在Go中使用protobuf 3.14,试图更新一些嵌套字段,但它会引起恐慌:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x30 pc=0x670028]

.proto文件:

syntax = "proto3";
option go_package = ".;my";
message My {
message _struct {
bytes Data = 1;
}
_struct Struct = 2; // e
}

go代码:

package main
import (
"aj/my"
)
func main() {
m := my.My{}
m.Struct.Data = []byte{1, 2, 3} // this causes panic, how to set it correctly?
}

我需要修改值,但是我在.pb中没有看到任何setter。去,如何修改它?

问题是m.Struct只是一个指向_struct类型的指针,它还没有初始化,所以你不能给它的Data字段分配任何东西。

如果您查看My消息生成的代码,它是这样的:

type My struct {
state         protoimpl.MessageState
sizeCache     protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Struct *My_XStruct
}

所以Struct类型是指向My_XStruct的指针。你必须这样做:

m := my.My{}
m.Struct = &my.My_XStruct{}
m.Struct.Data = []byte{1, 2}

最新更新