Değişim golang içinde yineleme süre değerleri
Hadi bu tür olduğunu varsayalım :
type Attribute struct {
Key, Val string
}
type Node struct {
Attr []Attribute
}
ve benim düğümün öznitelikleri değiştirmek için yineleme devam etmek istiyorum.
Yapabilmeyi çok isterdim
for _, attr := range n.Attr {
if attr.Key == "href" {
attr.Val = "something"
}
}
ama attr bir işaretçi değil, bu işe yaramaz ve yapmak zorundayım
for i, attr := range n.Attr {
if attr.Key == "href" {
n.Attr[i].Val = "something"
}
}
Daha basit ya da daha hızlı bir yolu var mı ? Doğrudan range göstermeniz mümkün mü ?
Belli ki sadece yineleme için yapılarını değiştirmek istemiyorum Daha fazla ayrıntılı çözümleri hiçbir çözümleri vardır
CEVAP
Hayır, istediğiniz kısaltması mümkün değildir.
Bunun nedeni range kopya üzerinden yineleme sensin dilimden değerleri.
specification about range diyor ki:
Range expression 1st value 2nd value (if 2nd variable is present) array or slice a [n]E, *[n]E, or []E index i int a[i] E
Menzil çok diziler için ikinci değeri a[i] kullandığı etkili olduğu anlamına gelir/dilim
değer orijinal değer dokunulmaz hale kopyalanır.
Bu davranış following code ile gösterilmiştir:
x := make([]int, 3)
x[0], x[1], x[2] = 1, 2, 3
for i, val := range x {
println(&x[i], "vs.", &val)
}
Kod aralığı değeri ve gerçek için tamamen farklı bellek konumlarını yazdırır dilim değer:
0xf84000f010 vs. 0x7f095ed0bf68
0xf84000f014 vs. 0x7f095ed0bf68
0xf84000f018 vs. 0x7f095ed0bf68
Yapabileceğiniz tek şey işaretçileri veya zaten jnml ve peterSO tarafından önerilen dizin kullanmaktır.

Nasıl NSMutableArray içinde CGRect değ...
Java: İyi bir topluluk içinde yineleme...
Yineleme Java koleksiyonları üzerinde ...
Bayraklar üzerinde değerleri Numaralam...
-döngü içinde setTimeout ardışık değer...