定期更新总结使用golang过程中遇到的常见问题。
关注我,不迷路1."循环永动机"
遍历数组的同时修改数组元素,能否得到一个永远都不会停止的循环?
func main() {
s := []int{1, 2, 3}
for _, v := range s {
s = append(s, v)
}
fmt.Println(s)
}
输出:
[1 2 3 1 2 3]
发现上面代码并不会一直循环下去,说明在循环内改变了切片,但不影响循环次数。
原因分析
for range
// The loop we generate:
// 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
// }
go
sa := s
sv1 := 0
sn := len(sa)
v1 := sv1
v2 := nil
for ; sv1 < sn; sv1++ {
tmp := sa[sv1]
v1, v2 = sv1, tmp
}
gosalenfor range
本文由mdnice多平台发布