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

我的结构


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)

}

我收到了这个错误。“恐慌:运行时错误:索引超出范围”


如何解决这个问题?


12345678_0001
浏览 157回答 3
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,请参阅文档

慕妹3146593

按照另一个答案中的建议定义结构后: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 mainimport "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 中验证这一点。

郎朗坤

Objects不包含任何元素。你需要先append元素。像这样:r.Objects = append(r.Objects, struct{ id int }{})您也可以r.Objects[0].id = 10;像这样省略使用结构的初始化:r.Objects = append(r.Objects, struct{ id int }{ 10 })
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go