指针

Go 虽然保留了指针,但与其他变成语言不同的是,在 Go 当中不支持指针运算以及 -> 运算符,而直接采用 . 选择符来操作指针目标对象的成员
-操作符 & 取变量地址, 使用 * 通过指针间接访问目标对象
-默认值为 nil 而非 NULL

递增递减语句

在 Go 中, ++-- 是作为语句而不是作为表达式,只能放在变量右边

判断语句 if

-条件表达式没有括号
-支持一个初始化表达式(可以是并行方式)
-左括号必须和条件语句或 else 在同一行
-支持单行模式
-初始化语句中的变量为 block 级别,同时因此外部同名变量
-1.0.3版本中的编辑器BUG

  1. a := 10
  2. if a := 1; a > 0 {
  3. //结果为 1
  4. fmt.Println(a)
  5. }
  6. //结果为 10
  7. fmt.Println(a)

循环语句 for

-Go 只有 for 一个循环语句关键字,但支持3种形式
-初始化和步进表达式可以是多个值
-条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数
-左括号必须和条件语句在同一行

  1. a := 1
  2. for {
  3. a++
  4. if a > 3 {
  5. //跳出循环
  6. break
  7. }
  8. }
  9. for a <= 3 {
  10. a ++
  11. fmt.Println(a)
  12. }
  13. for i := 0; i < 3; i++ {
  14. a++
  15. fmt.Println(a)
  16. }

选择语句 switch

-可以使用任何类型或表达式作为条件语句
-不需要写 break ,一旦条件符合自动终止
-如希望继续执行下个 case ,需使用 fallthrough 语句
-支持一个初始化表达式(可以是并行方式),右侧需跟分号
-左括号必须和条件语句在同一行

  1. a := 1
  2. switch a {
  3. case 0:
  4. fmt.Println("a=0")
  5. case 1:
  6. fmt.Println("a=1")
  7. default:
  8. fmt.Println("None")
  9. }
  10. //case中判断
  11. switch {
  12. case a == 0:
  13. fmt.Println("a=0")
  14. //使用 fallthrough 判断成立时继续判断下个判断语句,不跳出
  15. fallthrough
  16. case a == 1:
  17. fmt.Println("a=1")
  18. default:
  19. fmt.Println("None")
  20. }
  21. switch a := 1; {
  22. //...
  23. }

跳转语句 gotobreackcontinue

-三个语法都可以配合标签使用
-标签名区分大小写,若不使用会造成编译错误
-breakcontinue 配合标签可用于多层循环嵌套的跳出
-goto 是调整执行位置,与其他2个语句配合标签的结果并不相同

  1. //定义循环体LABEL1
  2. LABEL1:
  3. for {
  4. for i := 0; i < 10; i++ {
  5. if i > 3 {
  6. //跳出LABEL1
  7. break LABEL1
  8. //跳到LABEL2
  9. goto LABEL2
  10. }
  11. }
  12. }
  13. fmt.Println("OVER")
  14. //定义循环体LABEL2
  15. LABEL2:
  16. fmt.Println("OK")