快速 Golang 语法教程(二)流程控制

快速过一遍 Golang 教程,方便查阅。

  1. 循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

func main() {

// 简单循环
for i := 0; i < 10; ++i {
// 表达式
}

// 省略
j := 0
for ; j < 10; {
j += 1
}

// for 代替 while 所以没有 while 了
run := true
for run {
// 表达式
}

// 无限循环
for {
// 表达式
}
}
  1. 条件判断
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package name

func a() {
i := 0

// 简单判断
if i < 0 {
// 表达式
}

// 内涵定义表达式
if j := 1; j > 0 {
// ...
}

// 组合 else
if j == 1 {
// ...
} else {
// ...
}

// 组合 else if
if j > 1 {
// ...
} else if j == 1 {
// ...
} else {
// ...
}
}
  1. switch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main

import (
"fmt"
"runtime"
"time"
)

func main() {
fmt.Print("Go runs on ")
// 条件符合 case 的运行
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
// 不需要写 break
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.\n", os)
}

fmt.Println("When's Saturday?")
today := time.Now().Weekday()
switch time.Saturday {
case today + 0:
// 匹配项支持表达式
fmt.Println("Today.")
case today + 1:
fmt.Println("Tomorrow.")
case today + 2:
fmt.Println("In two days.")
case f(today):
// 甚至支持函数
// 这个匹配项的意思是函数返回值等于 time.Saturday 成立
fmt.Println("In two days.")
default:
fmt.Println("Too far away.")
}
}
  1. defer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package main

import "fmt"

func main() {
// 推迟到函数结尾执行
defer fmt.Println("defer run")

fmt.Println("first run")

fmt.Println("counting")

// defer 是使用栈实现
// 在函数返回时执行
// 也就是最后入栈的最先执行
// 如下返回 done 9 8 7 6 5 4 3 2 1 0
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}

fmt.Println("done")
}