Go的第五课——控制语句的关键字使用

今天属实是摆了,主要是玩了有点久 + 补 CSAPP 的知识,所以也就补了一点点知识点。

一些关键字

fallthrough

原来 switch 可以下滑,只需要在最后使用关键字 fallthrough 即可,并且只能在 case 当中的最后一行使用,其余地方使用均会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import "fmt"

func main() {
c := 1
switch c {
case 1:
fmt.Println(1)
fallthrough
case 2:
fmt.Println(2)
default:
fmt.Println(0)
}
}
/*
1
2
*/

break

它的一般用途和 C 语言是差不多的,跳出当前循环或者是跳出当前的 case。

主要有一个 break label 的写法指定跳出哪一重的循环。

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
package main

import "fmt"

func main() {
var i, j int
label1:
for i = 0; i < 10; i++ {
label2:
for j = 0; j < 10; j++ {
if i == 5 {
fmt.Println("END")
break label1
}
if j == 5 {
fmt.Println()
break label2
}
fmt.Printf("%d ", j)
}
}
fmt.Print(i, j)
}
/*
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
END
5 0
*/

continue

提前结束本次循环,它也有一个 continue label 的写法,和 break 差不多,指明是提前结束哪个循环。

goto

也是跟 C 语言差不多,不过感觉跟汇编语言的 jmp 也有一点相似,它以标签为单位跳转。

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
package main

import "fmt"

func main() {

var i, j int
label1:
for i = 0; i < 10; i++ {

for j = 0; j < 10; j++ {
if i == 5 {
fmt.Println("END")
break label1
}
if j == 5 {
fmt.Println()
goto label2
}
fmt.Printf("%d ", j)
}
}
label2:
fmt.Print(i, j)
}
/*
0 1 2 3 4
0 5
*/