package main import "fmt" func main() { s := []int{1,2,3,4,5} for _, v:=range s { s =append(s, v) fmt.Printf("len(s)=%v\n",len(s)) } }
这个代码会形成死循环吗?golang
for range
实际上是golang
的语法糖
,在循环开始前会获取切片的长度 len(切片)
,而后再执行len(切片)
次数的循环。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 // }
func main() { s := []int{1,2,3,4,5} for_temp := s len_temp := len(for_temp) for index_temp := 0; index_temp < len_temp; index_temp++ { value_temp := for_temp[index_temp] _ = index_temp value := value_temp // 如下是 original body s =append(s, value) fmt.Printf("len(s)=%v\n",len(s)) } }
len(s)=6 len(s)=7 len(s)=8 len(s)=9 len(s)=10
因此说,那个同事用的是golang吗?面试
中文、数字、英文字母
的字符串