登录
首页 >  Golang >  Go问答

在Golang中返回具有无效内存地址的结构的值

来源:stackoverflow

时间:2024-03-02 16:51:26 261浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《在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 错误:无效的内存地址或 nil 指针取消引用 在膳食。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
}

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


解决方案


如果您不想更改模型:

    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

好了,本文到此结束,带大家了解了《在Golang中返回具有无效内存地址的结构的值》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>