数组 – 在golang中迭代时更改值
发布时间:2020-12-16 18:11:24 所属栏目:大数据 来源:网络整理
导读:让我们假设我有这些类型: type Attribute struct { Key,Val string}type Node struct { Attr []Attribute} 并且我想迭代我的节点的属性来更改它们。 我本来希望能够做到 for _,attr := range n.Attr { if attr.Key == "href" { attr.Val = "something" }}
让我们假设我有这些类型:
type Attribute struct { Key,Val string } type Node struct { Attr []Attribute } 并且我想迭代我的节点的属性来更改它们。 我本来希望能够做到 for _,attr := range n.Attr { if attr.Key == "href" { attr.Val = "something" } } 但作为attr不是一个指针,这将不工作,我必须做 for i,attr := range n.Attr { if attr.Key == "href" { n.Attr[i].Val = "something" } } 有更简单或更快的方式吗?是否可以直接从范围获取指针? 显然,我不想改变结构只是为了迭代和更冗长的解决方案没有解决方案
不,你想要的缩写是不可能的。
这样做的原因是范围复制您要迭代的切片中的值。
所以,range使用a [i]作为数组/切片的第二个值,这有效地意味着 这种行为由following code: x := make([]int,3) x[0],x[1],x[2] = 1,2,3 for i,val := range x { println(&x[i],"vs.",&val) } 该代码为范围和实际值打印出完全不同的内存位置 0xf84000f010 vs. 0x7f095ed0bf68 0xf84000f014 vs. 0x7f095ed0bf68 0xf84000f018 vs. 0x7f095ed0bf68 所以,你可以做的唯一的事情是使用指针或索引,如jnml和peterSO已经提出的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |