type path []byte
func (p path) ToUpper() {
for i, b := range p {
if 'a' <= b && b <= 'z' {
p[i] = b + 'A' - 'a'
}
}
}
上面的(这个例子是来自&#34; Go Go博客的副本&#34;),如果ToUpper改变如下:
func (p path) ToUpper() {
for i, _ := range p {
if 'a' <= p[i] && p[i] <= 'z' {
p[i] = p[i] + 'A' - 'a'
}
}
}
会更有效率
为什么?
&#34; Go Blog&#34;用前者说: &#34;这里,ToUpper方法在for range构造中使用两个变量来捕获索引和切片元素。这种形式的循环避免了在体内多次写p [i]。&#34;
是什么意思?
答案 0 :(得分:0)
前者有更多的内存操作,即在b
上:除了i
和之外,它在循环的第一次运行中分配并在每次后续运行中重新分配原始切片被修改,而在第二个示例中,仅分配i
并重新分配并用于修改原始切片。