将值追加到Golang中struct的struct返回无效的内存地址

将值追加到Golang中struct的struct返回无效的内存地址,go,struct,Go,Struct,我有一个“附加”另一个结构的膳食结构,除了我想添加另一个结构“mealComponents” 其中*model.mean如下所示 type Meal struct { ID int64 `json:"id"` } 我想要的基本上是让“mealMain”结构像“Dine”结构一样工作,这样我就可以分配值并以某种方式作为子对象附加mealComponent(或者这不是一个好主意?我愿意接受建议) 但是当我做这样的事情的时候 var meal mealMa

我有一个“附加”另一个结构的膳食结构,除了我想添加另一个结构“mealComponents”

其中*model.mean如下所示

type Meal struct {
    ID               int64     `json:"id"`
}
我想要的基本上是让“mealMain”结构像“Dine”结构一样工作,这样我就可以分配值并以某种方式作为子对象附加mealComponent(或者这不是一个好主意?我愿意接受建议)

但是当我做这样的事情的时候

var meal mealMain
meal.ID = 1
它在fine.ID分配时抛出
运行时错误:无效内存地址或零指针取消引用

但如果我这样做:

type mealMain struct {
    MealMain *model.Meal `json:"meal_main"`
    Components []mealComponent `json:"components"`
}
{
    "MealModel": {
        "id": 1
    }
}
然后按如下方式分配:

var meal mealMain
meal.mealMain.ID = 1
它工作正常,但我有更深层的返回json,如下所示:

type mealMain struct {
    MealMain *model.Meal `json:"meal_main"`
    Components []mealComponent `json:"components"`
}
{
    "MealModel": {
        "id": 1
    }
}
我想要的是:

{
    "id": 1
}

注意:我希望避免更改模型。

如果您不想更改模型:

var-meal=mealMain{
餐:&餐{},
}
1.ID=1
关键是,在下面的结构中,如果您不初始化它,那么将
*mean
设置为
nil

type mealMain struct {
    *Meal
    Components []mealComponent `json:"components"`
}
我可能会创建一个不再需要担心正确初始化的函数:

func newMealMain()mealMain{
返回米尔曼{
餐:&餐{},
}
}
那么您的代码将是:

var-fine=newMealMain()
1.ID=1

不要嵌入指针类型。你似乎对
mealResponse
类型有问题,为什么不在问题中包含它的定义?我假设
mealResponse
实际上是
mealMain
struct,对吗?@mkopriva我在写问题时犯了一个错误,应该是的mealMain@RizkiHadiaturrasyid当前位置调整了我的答案谢谢。最后,我在mealMain struct中移除了食物中的*,效果很好。我也尝试过你的解决方案,它也很有效。我想我需要学习更多关于指针和初始化的知识。哦,我想知道这个作业是为了什么?因为当我像这样使用它时,&model.餐{},它是有效的,但是这个model.餐:&model.餐{},不起作用?如果你想把它拔出来,你需要做
model.餐=&model.餐{
。这就是你的意思吗?我说的是这个函数newMealMain()mealMain{return mealMain{Meal:&Meal{},}在我的代码中它就像这顿饭:&model.Meal{},但是如果我写model.Meal:&model.Meal{},它会出错。啊,它一定是:
Meal:&model.meat{/code>,而不是
model.meat:&model.meat{}/code>