流程控制

条件语句

1
2
3
4
5
6
7
8
9
if 条件1 {
逻辑代码1
} else if 条件2 {
逻辑代码2
} else if 条件 ... {
逻辑代码 ...
} else {
逻辑代码 else
}

选择语句

1
2
3
4
5
6
7
8
9
10
11
12
switch 表达式 {
case 表达式值1:
业务逻辑代码1
case 表达式值2:
业务逻辑代码2
case 表达式值3:
业务逻辑代码3
case 表达式值 ...:
业务逻辑代码 ...
default:
业务逻辑代码
}

循环语句

只有for:四种用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// for 接三个表达式
for initialisation; condition; post {
code
}

// for 接一个条件表达式
for condition {
code
}

// for 接一个 range 表达式
for range_expression {
code
}

// for 不接表达式
for {
code
}

defer 延迟调用

含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。简单点说就是 defer 语句后面跟着的函数会延迟到当前函数执行完后再执行

  • defer 不仅能够延迟函数的执行,也能延迟方法的执行。
  • 使用 defer 只是延时调用函数,传递给函数里的变量,不应该受到后续程序的影响。
  • 当一个函数内多次调用 defer 时,Go 会把 defer 调用放入到一个栈中,随后按照 后进先出 的顺序执行。
  • defer 在 return 后调用
1
2
3
4
5
6
7
8
9
10
11
12
package main

import "fmt"

func fun() {
fmt.Println("fun函数...")
}

func main() {
defer fun()
fmt.Println("main函数...")
}

goto 无条件跳转

  • 在 Go 语言中保留 gotogoto 后面接的是标签,表示下一步要执行哪里的代码。
  • goto 语句与标签之间不能有变量声明,否则编译错误。编译下面的程序会报错。
1
2
3
4
5
6
7
8
9
10
11
package main

import "fmt"

func main() {
fmt.Println("1")
goto label
fmt.Println("2")
label:
fmt.Println("3")
}