参考两篇文章:
Some tricks and tips for using for range in GoLang
Handling Large Arrays in Golang: Should You Use For Range or For Loop?
特别是 这里 的 Golang 源代码内容:
1 | // The loop we generate: |
可以看到 go 是先复制了一份要迭代的原对象 range
为 range_temp
,之后对其进行传统 for 迭代。
因此指针 index_temp
所访问的值也是这份副本里的内容,如果有想在循环过程中边修改边存储就容易出问题。
对于大体积的迭代对象,使用 for range
还会付出额外的拷贝时空代价,而这悲惨的与你到底是用 for i, value := range
还是 for i := range
没多大关系…… 无非只是 index
和 value
到底有没有用到而已。