假设我有以下几种类型:
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
?
显然,我不想仅仅为了迭代而更改结构,更冗长的解决方案不是解决方案。
这是一个有趣的想法,可能是一个解决方案,但是在服务器端语言中,调用一个将在每次迭代中依次调用一个函数的函数看起来很繁琐。缺少泛型会使这种感觉更加沉重。
—
DenysSéguret13年
老实说,我认为那没那么重。调用一个或两个函数非常便宜,这通常是编译器最优化的。我会尝试一下并对其进行基准测试,以查看它是否符合要求。
—
Florian Margaine 2013年
由于Go缺少泛型,因此恐怕传递给函数的函数
—
DenysSéguret13年
forEach
一定会以类型断言开头。确实没有比更好attr := &n.Attr[i]
。
Array.prototype.forEach
JavaScript吗?