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,请参阅文档
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 中验证这一点。
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 })
- 3 回答
- 0 关注
- 156 浏览
添加回答
举报