簡體   English   中英

如何更新嵌套的 protobuf 字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM