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嗎?面試
中文、數字、英文字母
的字符串