04.6 switch语句
在本节介绍switch语句主要是因为switch可以用于正则表达式!首先看一段switch代码块:
1
switch asString {
2
case "1":
3
fmt.Println("One")
4
case "0":
5
fmt.Println("Zero")
6
default:
7
fmt.Println("Do not care!")
8
}
Copied!
这段代码能够区分不同的asString值所对应的不同操作。
switch代码块设置default子句是非常棒的实践。由于switchcase语句是依赖顺序的,所以default子句总是在最后声明。
switch的使用还可以更加灵活:
switch {
case number < 0:
​ fmt.Println("Less than zero")
case number > 0:
​ fmt.Println("Bigger than zero")
default:
​ fmt.Println("zero")
}
上面的代码块能够在某个数字正数、负数、以及0的情况下执行不同的任务。如你所见,switch的分支语句可以是条件语句,那么其分支语句同样也可以是正则表达式!
关于switch的用法将在switch.go中分5部分展示。
第一部分:
1
package main
2
3
import (
4
"fmt"
5
"os"
6
"regexp"
7
"strconv"
8
)
9
10
func main() {
11
arguments := os.Args
12
if len(arguments) <2 {
13
fmt.Println("Usage: switch number")
14
os.Exit(1)
15
}
Copied!
regex包用于生成正则表达。
第二部分代码:
1
number, err := strconv.Atoi(arguments[1])
2
if err != nil {
3
fmt.Println("The value is not an integer",number)
4
}else {
5
switch {
6
case number<0:
7
fmt.Println("Less than zero")
8
case number >0:
9
fmt.Println("Bigger than zero")
10
default:
11
fmt.Println("Zero")
12
}
13
}
Copied!
第三部分代码:
1
asString := arguments[1]
2
switch asString{
3
case "5":
4
fmt.Println("Five")
5
case "0":
6
fmt.Println("Zero")
7
default:
8
fmt.Println("Do not care")
9
}
Copied!
这部分代码说明case子句可以包含硬编码的变量,这种情况通常是switch`后跟有一个变量。
第四部分代码:
1
var negative = regexp.MustCompile(`-`)
2
var floatingPoint = regexp.MustCompile(`\d?\.\d`)
3
var mail = regexp.MustCompile(`^[^@][email protected][^@.]+\.[^@.]+`)
4
switch {
5
case negative.MatchString(asString):
6
fmt.Println("Negative number")
7
case floatingPoint.MatchString(asString):
8
fmt.Println("Floating Point")
9
case mail.MatchString(asString):
10
fmt.Println("It is an email")
11
fallthrough
12
default:
13
fmt.Println("Something else")
14
}
Copied!
这部分代码十分有趣。首先,我们定义了3个正则表达negative,floatingPoint,以及mail。然后使用regexp.MatchString()switch中匹配不同的情况。
最后,fallthrough关键字告诉Go执行接下来的分支,即default分支。这意味着无论mail.MatchString(asString)是否成功匹配,default子句都会执行。
最后一部分:
1
var aType error = nil
2
switch aType.(type) {
3
case nil:
4
fmt.Println("It is a nil interface")
5
default:
6
fmt.Println("It it not a nil interface")
7
8
}
9
10
}
Copied!
这段代码说明switch能够区分不同类型,你将在第7章中了解到接口的知识。执行switch.go将会产生如下输出:
1
$ go run switch.go
2
Usage: switch number
3
exit status 1
4
hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go [email protected]
5
The value is not an integer 0
6
Do not care
7
It is an email
8
Something else
9
It is a nil interface
10
hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 5
11
Bigger than zero
12
Five
13
Something else
14
It is a nil interface
15
hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 0
16
Zero
17
Zero
18
Something else
19
It is a nil interface
20
hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go 1.2
21
The value is not an integer 0
22
Do not care
23
Floating Point
24
It is a nil interface
25
hanshanjiedeMacBook-Pro:chapter4 hanshanjie$ go run switch.go -1.5
26
The value is not an integer 0
27
Do not care
28
Negative number
29
It is a nil interface
Copied!
Last modified 2yr ago
Copy link