我刚开始学习golang,我有以下代码:
https://play.golang.org/p/OBsf9MRLD8
package main
import (
"encoding/json"
"os"
)
type ResourceUsage struct {
Type string
}
type Node struct {
Resources []ResourceUsage
}
func main(){
encoder := json.NewEncoder(os.Stdout)
nodes := make([]Node, 2)
nodes[0] = Node{}
nodes[1] = Node{}
for _,n := range nodes {
n.Resources = append(n.Resources, ResourceUsage{Type: "test"})
}
encoder.Encode(nodes)
}
我希望它能打印
[{"Resources":[{"Type:"test"}]},{"Resources":[{"Type:"test"}]}]
但我得到了:
[{"Resources":null},{"Resources":null}]
如何完成预期的输出?
答案 0 :(得分:7)
结构被复制到范围循环中。您需要通过索引访问。
for i := range nodes {
nodes[i].Resources = append(nodes[i].Resources, ResourceUsage{Type: "test"})
}
您也可以选择使用不会复制数据的指针。
nodes := make([]*Node, 2)
nodes[0] = &Node{}
nodes[1] = &Node{}
@Kaedys指出,你不能取迭代值的地址。
for _, v := range nodes {
&v // mistake
}