除了要添加另一个结构“ mealComponents”外,我有一个膳食结构“附加”了另一个结构。
type mealMain struct {
*model.Meal
Components []mealComponent `json:"components"`
}
type mealComponent struct {
*model.MealComponent
}
其中* model.Meal如下
type Meal struct {
ID int64 `json:"id"`
}
我想要的基本上是让“ mealMain”结构像“ Meal”结构一样工作,以便我可以分配值并以某种方式将meatComponent追加为子级(或者这不是一个好主意?我愿意接受建议)
但是当我做这样的事情
var meal mealMain
meal.ID = 1
在进餐时将runtime error: invalid memory address or nil pointer dereference
分配给ID。
但是如果我这样做:
type mealMain struct {
MealMain *model.Meal `json:"meal_main"`
Components []mealComponent `json:"components"`
}
然后以这种方式分配它:
var meal mealMain
meal.mealMain.ID = 1
它可以正常工作,但是我返回的json更像这样:
{
"MealModel": {
"id": 1
}
}
我想要的是这个
{
"id": 1
}
注意:我想避免更改模型。
答案 0 :(得分:2)
如果您不想更改模型:
var meal = mealMain{
Meal: &Meal{},
}
meal.ID = 1
重点是,如果不初始化,则在下面的结构*Meal
中将其设置为nil
。
type mealMain struct {
*Meal
Components []mealComponent `json:"components"`
}
我可能会创建一个函数,不必再担心正确的初始化:
func newMealMain() mealMain {
return mealMain{
Meal: &Meal{},
}
}
那么您的代码将是:
var meal = newMealMain()
meal.ID = 1