为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
Smart猫小萌 2023-06-26 17:38:45
我有一个膳食结构,它“附加”另一个结构,但我想添加另一个结构“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 mealMainmeal.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 mealMainmeal.mealMain.ID = 1它工作正常,但我的返回 json 更深,如下所示:{    "MealModel": {        "id": 1    }}我想要的是这样的:{    "id": 1}注意:我想避免更改模型。
查看完整描述

1 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

如果您不想更改型号:


    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


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信