gpt4 book ai didi

go - 如何更新嵌套的protobuf字段

转载 作者:行者123 更新时间:2023-12-03 10:10:27 26 4
gpt4 key购买 nike

我在Go中使用protobuf 3.14,试图更新一些嵌套字段,但会导致 panic :

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
}
执行代码:
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中看不到任何 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}

关于go - 如何更新嵌套的protobuf字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66068618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com