for range 里面的语法糖

200 阅读1分钟

1.首先什么是语法糖?

语法糖(Syntactic sugar)的概念是由英国计算机科学家彼得·兰丁提出的,用于表示编程语言中的某种类型的语法。换句话说:就是语法表达式的新写法或者简便写法
下面来看一道特别反常识的题(这也是容易被语法糖坑的时候)

package main  
import "fmt"  
func main() {  
 s := []int{1,2,3,4}  
 for _, v:=range s {  
  s =append(s, v)  //是不是总感觉这里应该是死循环,然后 s 无限增大
  fmt.Printf("len(s)=%d\n",len(s))  
 }  
}
//len(s)=6  
//len(s)=7  
//len(s)=8  
//len(s)=9  
//len(s)=10

2.for range 的反常识是因为这是一个语法糖的写法

for range 语法糖的原本代码:可以发现循环开始前会获取切片的长度 len(切片),然后再执行

// 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  
//   }