迭代时更改值

假设我有以下几种类型:


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?


显然,我不想仅仅为了迭代而更改结构,更冗长的解决方案不是解决方案。


一只萌萌小番薯
浏览 427回答 3
3回答

慕码人2483693

例如:package mainimport "fmt"type Attribute struct {        Key, Val string}type Node struct {        Attr []*Attribute}func main() {        n := Node{[]*Attribute{                &Attribute{"foo", ""},                &Attribute{"href", ""},                &Attribute{"bar", ""},        }}        for _, attr := range n.Attr {                if attr.Key == "href" {                        attr.Val = "something"                }        }        for _, v := range n.Attr {                fmt.Printf("%#v\n", *v)        }}操场输出量main.Attribute{Key:"foo", Val:""}main.Attribute{Key:"href", Val:"something"}main.Attribute{Key:"bar", Val:""}替代方法:package mainimport "fmt"type Attribute struct {        Key, Val string}type Node struct {        Attr []Attribute}func main() {        n := Node{[]Attribute{            {"foo", ""},            {"href", ""},            {"bar", ""},        }}        for i := range n.Attr {                attr := &n.Attr[i]                if attr.Key == "href" {                        attr.Val = "something"                }        }        for _, v := range n.Attr {                fmt.Printf("%#v\n", v)        }}操场输出:main.Attribute{Key:"foo", Val:""}main.Attribute{Key:"href", Val:"something"}main.Attribute{Key:"bar", Val:""}
打开App,查看更多内容
随时随地看视频慕课网APP