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

I have a meal struct that "appends" another struct, except I want to add another struct "mealComponents".

type mealMain struct {
    *model.Meal
    Components []mealComponent `json:"components"`
}

type mealComponent struct {
    *model.MealComponent
}

Where *model.Meal is as follows

type Meal struct {
    ID               int64     `json:"id"`
}

What I want is basically for "mealMain" struct to act like "Meal" struct, so that I can assign values and somehow append mealComponent as child (or maybe this is not a good idea? I'm open to suggestions)

However when I do something like this

var meal mealMain
meal.ID = 1

It throws runtime error: invalid memory address or nil pointer dereference at meal.ID assignment.

But if I do it like this:

type mealMain struct {
    MealMain *model.Meal `json:"meal_main"`
    Components []mealComponent `json:"components"`
}

Then assign it this way:

var meal mealMain
meal.mealMain.ID = 1

It works properly, but I have the return json even deeper like this:

{
    "MealModel": {
        "id": 1
    }
}

What I want is this:

{
    "id": 1
}

Note: I want to avoid changing the model.

If you don't want to change the model:

    var meal = mealMain{
        Meal: &Meal{},
    }
    meal.ID = 1

The point is that in the following struct *Meal is set to nil if you don't initialize it.

type mealMain struct {
    *Meal
    Components []mealComponent `json:"components"`
}

I'd probably create a function to never have to worry about the correct initialization ever again:

func newMealMain() mealMain {
    return mealMain{
        Meal: &Meal{},
    }
}

Then your code would be:

    var meal = newMealMain()
    meal.ID = 1