に反復しながらの私は、これらのタイプを持っているとしましょう:変更値golang
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
から直接ポインタを取得することはできますか?
明らかに、私は反復のためだけに構造を変更する必要はなく、より冗長なソリューションは解決策ではありません。例えば
JavaScriptで 'Array.prototype.forEach'のようなものが必要ですか? –
それは興味深い考えです。それは解決策でしたが、各反復で関数を呼び出す関数を呼び出すと、サーバー側の言語で重く見えます。ジェネリック医薬品の欠如は、これをさらに重くするでしょう。 –
正直言って、私はそれが重いとは思わない。 1つまたは2つの関数を呼び出すことは非常に安価ですが、これは通常、コンパイラが最も最適化するものです。私はそれを試し、そのベンチマークに合っているかどうかを判断するだろう。 –