Go 无法修改数组内的结构?

Go 无法修改数组内的结构?,go,Go,我刚开始学习golang,我有以下代码: 我希望它能打印出来 [{"Resources":[{"Type:"test"}]},{"Resources":[{"Type:"test"}]}] 但我得到的却是: [{"Resources":null},{"Resources":null}] 如何实现预期的输出?在范围循环中复制结构。您需要通过索引进行访问 for i := range nodes { nodes[i].Resources = append(nodes[i].Resourc

我刚开始学习golang,我有以下代码:

我希望它能打印出来

[{"Resources":[{"Type:"test"}]},{"Resources":[{"Type:"test"}]}]
但我得到的却是:

[{"Resources":null},{"Resources":null}]

如何实现预期的输出?

在范围循环中复制结构。您需要通过索引进行访问

for i := range nodes {
    nodes[i].Resources = append(nodes[i].Resources, ResourceUsage{Type: "test"})
}
您还可以选择使用指针,它不会复制数据

nodes := make([]*Node, 2)
nodes[0] = &Node{}
nodes[1] = &Node{}
指出,不能获取迭代值的地址

for _, v := range nodes {
    &v // mistake
}

结构在范围循环中复制。您需要通过索引进行访问

for i := range nodes {
    nodes[i].Resources = append(nodes[i].Resources, ResourceUsage{Type: "test"})
}
您还可以选择使用指针,它不会复制数据

nodes := make([]*Node, 2)
nodes[0] = &Node{}
nodes[1] = &Node{}
指出,不能获取迭代值的地址

for _, v := range nodes {
    &v // mistake
}

啊,这是有道理的。谢谢:值得注意的是,如果您尝试使用for循环获取对象的地址,这也适用。您必须使用索引循环,因为for u,n:=range o表单将每个索引处的对象复制到单个地址位置。啊,这是有道理的。谢谢:值得注意的是,如果您尝试使用for循环获取对象的地址,这也适用。您必须使用索引循环,因为for u,n:=range o表单将每个索引处的对象复制到单个地址位置。