for range 语句

  • range表达式只会在for语句开始执行时被求值一次,无论后面有多少次迭代
  • range表达式的求值结果会被复制,也就是说,被迭代的对象时range表达式结果值的副本而不是原值
  1. // Demo1
  2. numbers2 := [...]int{1,2,3,4,5,6}
  3. maxIndex2 := len(numbers2) - 1
  4. for i, e := range numbers2 {
  5. if i == maxIndex2 {
  6. numbers2[0] += e
  7. } else {
  8. numbers2[i+1] += e
  9. }
  10. }
  11. fmt.Println(numbers2) // [7 3 5 7 9 11]
  12. fmt.Println()
  13. // Demo2
  14. numbers3 := []int{1,2,3,4,5,6}
  15. maxIndex3 := len(numbers3) - 1
  16. for i, e := range numbers3 {
  17. if i == maxIndex3 {
  18. numbers3[0] += e
  19. } else {
  20. numbers3[i + 1] += e
  21. }
  22. }
  23. fmt.Println(numbers3) // [22 3 6 10 15 21]

上述例子中range后跟着的数组和切片不同的数据类型会有不同的结果值

switch case 语句

  • case 语句表达式的所有子表达式都要与switch表达式的结果只判等
  • 同一switch语句中的所有case表达式的子表达式的结果值不能重复(这只是要求不能字面量重复
  • case 子句的编写熟悉怒很重要,最上边的case子句中的子表达式总是会被最先求值,判等的时候也是按照这个顺序
  • 子表达式的结果只有重复并且它们与switch表达式的结果只相等,位置靠上的case子句总会被选中