for range 循环 来遍历字符串 第七本【第五章】128~129页
1、for range 的底层其实是for len(range后面的原始内容),也即for range 是一次性拿到
range后面的全部内容和长度,然后再循环着慢慢享用;如果range后面是切片,由于切片实质
上是指向底层一个数组的指针,因此range一次性拿到的是一个指针和指针指向的底层数组的长
度,故如果指针指向的内容在遍历时发生了变化,那么虽然range的表面内容即那个指针还是地址
没变,但实质上每轮循环拿到的元素会随着变化,其他range后面是指针类型的,情形以此类推
以下为for range的底层代码:
for_range := 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 //值开发人员自己写的for k,v := range ** { } 大括号里的内容
}
其他类型数据的for range 一并参见自己朋友圈2020年8月4日转发的“通过两道面试题讲解GO for range …”
2、for k,v := range ** { } 中的k和v是被重复利用的,不会每次循环都重新申明一个也叫k和v的
变量,而是下一轮循环取到的k、v的值覆盖放到上一轮循环的k、v在内存中的空间里
3、参见自己朋友圈2020年8月4日转发的“通过两道面试题讲解GO for range …”