Golang:使用"对于范围"

时间:2016-01-17 13:30:42

标签: go

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;

是什么意思?

1 个答案:

答案 0 :(得分:0)

前者有更多的内存操作,即在b上:除了i 之外,它在循环的第一次运行中分配并在每次后续运行中重新分配原始切片被修改,而在第二个示例中,仅分配i并重新分配并用于修改原始切片。