for range 语句
- range表达式只会在for语句开始执行时被求值一次,无论后面有多少次迭代
- range表达式的求值结果会被复制,也就是说,被迭代的对象时range表达式结果值的副本而不是原值
// Demo1
numbers2 := [...]int{1,2,3,4,5,6}
maxIndex2 := len(numbers2) - 1
for i, e := range numbers2 {
if i == maxIndex2 {
numbers2[0] += e
} else {
numbers2[i+1] += e
}
}
fmt.Println(numbers2) // [7 3 5 7 9 11]
fmt.Println()
// Demo2
numbers3 := []int{1,2,3,4,5,6}
maxIndex3 := len(numbers3) - 1
for i, e := range numbers3 {
if i == maxIndex3 {
numbers3[0] += e
} else {
numbers3[i + 1] += e
}
}
fmt.Println(numbers3) // [22 3 6 10 15 21]
上述例子中range后跟着的数组和切片不同的数据类型会有不同的结果值
switch case 语句
- case 语句表达式的所有子表达式都要与switch表达式的结果只判等
- 同一switch语句中的所有case表达式的子表达式的结果值不能重复(这只是要求不能字面量重复)
- case 子句的编写熟悉怒很重要,最上边的case子句中的子表达式总是会被最先求值,判等的时候也是按照这个顺序
- 子表达式的结果只有重复并且它们与switch表达式的结果只相等,位置靠上的case子句总会被选中