2022-10-10:以下go语言代码输出什么?A:[1 2 3 0 1 2];B:死循环;C:[1 2 3 1 2 3];D:[1 2 3]。

package main

import "fmt"

func main() {
	v := []int{1, 2, 3}
	for i := range v {
		v = append(v, i)
	}
	fmt.Println(v)
}

答案选A。在遍历之前就获取的切片的长度len_temp := len(v)遍历的次数不会随着切片的变化而变化,代码自然不会是死循环了。另外,i是序号,不是值,在go语言里,for range第一个值一定是序号。这跟其他语言不一样,其他语言有可能是值,容易搞混淆。

等价于如下代码​:

package main

import "fmt"

func main() {
	v := []int{1, 2, 3}
	len_temp := len(v)
	for i := 0; i < len_temp; i++ {
		v = append(v, i)
	}
	fmt.Println(v)
}

在这里插入图片描述