[英]How to update nested protobuf field
我在 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.go中沒有看到任何設置器,如何修改它?
問題是m.Struct
只是一個指向_struct
類型的指針,它還沒有初始化,所以你不能為它的Data
字段分配任何東西。
如果您查看為My
message 生成的代碼,它是這樣的:
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.