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