顺序结构的程序虽然能解决计算、输出等问题,但是不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。
1、单语句分支
if 布尔表达式 { // 注意 花括号 { 必须与表达式同行
/* 在布尔表达式为 true时执行 */
}
// 用于条件判断
isLogin := true
if isLogin {
fmt.Println("hello sgg")
}
2、双分支语句
双分支语句:顾名思义就是 二条分支二选一执行!
// 用于条件判断
isLogin := true
if isLogin {
fmt.Println("hello sgg")
} else {
fmt.Println("please you login")
}
3、if 多分支语句
多分支即从比双分支更多的分支选择一支执行。
score := 90
if score > 90 {
fmt.Println("成绩优秀")
} else if score >= 80 {
fmt.Println("成绩良好")
} else if score >= 60 {
fmt.Println("成绩及格")
} else {
fmt.Println("成绩不及格")
}
不管多少条分支只能执行一条分支!
4、switch 多分支语句
switch var {
case val1:
...
case val2:
...
default:
...
}
switch语句也是多分支选择语句,执行哪一块代码块,取决于switch后的值与哪一case值匹配成功,则执行该case后的代码块。
/*
给出如下选项,并根据选项进行效果展示:
输入1、2:则输出"普通攻击"
输入3:则输出"超级攻击"
输入4:则输出"使用道具"
*/
var choice int
fmt.Println("请输入选择:")
fmt.Scan(&choice) // 标准输入
switch choice {
case 1, 2: // case 后面可以跟1到多个值,支持多个条件匹配
fmt.Println("普通攻击")
case 3:
fmt.Println("超级攻击")
case 4:
fmt.Println("使用道具")
default:
fmt.Println("输入有误")
}
1. switch 比 if...else...更为简洁
2. 执行效率更高。switch...case... 会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与Switch变量的值是相等的。从而,switch....case...不用像if...else...那样去遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。
3. 到底使用哪一个选择语句,代码环境有关,如果是范围取值,则使用 if...else...语句更为快捷;如果是确定的值,则使用 switch 是更优方案。
5、分支嵌套
嵌套最多不要超过三层。
score := 90
if reflect.TypeOf(score).Name() == "int" {
if score > 90 {
fmt.Println("成绩优秀")
} else if score >= 80 {
fmt.Println("成绩良好")
} else if score >= 60 {
fmt.Println("成绩及格")
} else {
fmt.Println("成绩不及格")
}
}