switch 语句也是一种经典控制语句,可以看做是 if-else 语句链的简写。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Print("Go runs on ")
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd
// plan9, windows...
fmt.Printf("%s.\n", os)
}
}
|
Go 语言 switch 结构跟 C 、 C++ 、 Java 、 JavaScript 以及 PHP 等类似,不同的是,Go 只执行匹配的 case 代码体,不包括下面的。
对于其他语言,一般需要在每个 case 末尾处用 break 语句来结束。实际上,Go 相当于自动在每个 case 末尾添加了 break 语句,这避免了大量因为漏掉 break 而导致的错误。
另外,Go 语言的 switch 更为灵活, case 条件不必是常量,也不必是整数。
检查顺序
switch 从上往下对 case 进行检查,直到匹配。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package main
import (
"fmt"
"time"
)
func main() {
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.")
default:
fmt.Println("Too far away.")
}
}
|
举另一个例子,如果 i 的值为零,那么函数 f 就不会被调用了:
1
2
3
4
|
switch i {
case 0:
case f():
}
|
省略条件
在 Go 语言,switch 条件可以省略,等价于 switch true
。这种结构非常简洁,可以用来代替过长的 if-else 链:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
}
|
【小菜学Go语言】系列文章首发于公众号【小菜学编程】,敬请关注: