如果我们循环一个slice,然后在循环过程中,不断的给它append增加长度,是不是就可以实现永动机?
```
func main(){
var s = []int{1,2,3}
for _,i := range s{
s = append(s, i)
fmt.Println(s)
}
fmt.Println(s)
}
```
输出
```
$ go run "/Users/hugo/go/src/myProject/studyGo/go的for...range/main.go"
[1 2 3 1]
[1 2 3 1 2]
[1 2 3 1 2 3]
[1 2 3 1 2 3]
```
为什么只有一个循环就停了?看slice现在有6个元素了,却只循环了三次。why?
循环三次这是很正常的,如果循环了四次反而不正常了
```go
// for_temp := range
// len_temp := len(for_temp)
// for index_temp = 0; index_temp < len_temp; index_temp++ {
// value_temp = for_temp[index_temp]
// index = index_temp
// value = value_temp
// original body
// }
```
从源码可以看出在循环之前,已经获取了长度。
https://garbagecollected.org/2017/02/22/go-range-loop-internals/
#4