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