猿问

将值附加到 Golang 中的结构的结构返回无效的内存地址

我有一个膳食结构,它“附加”另一个结构,但我想添加另一个结构“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”结构一样工作,这样我就可以分配值并以某种方式将mealComponent作为子项附加(或者也许这不是一个好主意?我愿意接受建议)


但是当我做这样的事情时


var meal mealMain

meal.ID = 1

它抛出runtime error: invalid memory address or nil pointer dereference了meal.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

}

注意:我想避免更改模型。


Smart猫小萌
浏览 119回答 1
1回答

慕哥6287543

如果您不想更改型号:    var meal = mealMain{        Meal: &Meal{},    }    meal.ID = 1要点是,如果您不初始化以下结构体*Meal,则将其设置为。niltype mealMain struct {    *Meal    Components []mealComponent `json:"components"`}我可能会创建一个函数,这样就再也不用担心正确的初始化了:func newMealMain() mealMain {    return mealMain{        Meal: &Meal{},    }}那么你的代码将是:    var meal = newMealMain()    meal.ID = 1
随时随地看视频慕课网APP

相关分类

Go
我要回答