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

如何在golang中初始化嵌套结构数组的值

如何在golang中初始化嵌套结构数组的值

Go
12345678_0001 2021-11-22 18:47:50
我的结构type Result struct {   name   string   Objects []struct {       id int   }}为此初始化值func main() {   var r Result;   r.name  = "Vanaraj";   r.Objects[0].id = 10;   fmt.Println(r)}我收到了这个错误。“恐慌:运行时错误:索引超出范围”如何解决这个问题?
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

首先,我想说为您的结构定义类型更为惯用,无论结构多么简单。例如:


type MyStruct struct {

    MyField int

}

这意味着将您的Result结构更改为如下所示:


type Result struct {

    name   string

    Objects []MyStruct

}

您的程序发生混乱的原因是您试图访问Object尚未分配的内存区域(s 数组中的一项)。


对于结构数组,这需要使用make.


r.Objects = make([]MyStruct, 0)

然后,为了安全地添加到您的数组中,您最好实例化一个 individual MyStruct,即


ms := MyStruct{

    MyField: 10,

}

然后把append它放到你的r.Objects数组中


r.Objects = append(r.Objects, ms)

有关 的更多信息make,请参阅文档


查看完整回答
反对 回复 2021-11-22
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

按照另一个答案中的建议定义结构后:


type MyStruct struct {

    MyField int

}



type Result struct {

    Name   string

    Objects []MyStruct

}

然后你可以Result像这样初始化一个对象:


result := Result{

    Name: "I am Groot",

    Objects: []MyStruct{

        {

            MyField: 1,

        },

        {

            MyField: 2,

        },

        {

            MyField: 3,

        },

    },

}

完整代码:


package main


import "fmt"


func main() {

    result := Result{

        Name: "I am Groot",

        Objects: []MyStruct{

            {

                MyField: 1,

            },

            {

                MyField: 2,

            },

            {

                MyField: 3,

            },

        },

    }


    fmt.Println(result)


}


type MyStruct struct {

    MyField int

}


type Result struct {

    Name    string

    Objects []MyStruct

}

你可以在这个Go Playground 中验证这一点。


查看完整回答
反对 回复 2021-11-22
?
郎朗坤

TA贡献1921条经验 获得超9个赞

Objects不包含任何元素。你需要先append元素。像这样:

r.Objects = append(r.Objects, struct{ id int }{})

您也可以r.Objects[0].id = 10;像这样省略使用结构的初始化:

r.Objects = append(r.Objects, struct{ id int }{ 10 })


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

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