选择结构
一、 if语句
1. if
var a int=3
if a == 3{//条件表达式没有括号
fmt.Println("a==3")
}
//支持一个初始化表达式,初始化字句和条件表达式直接需要用分号分隔
if b:= 3;b == 3{
fmt.Println("b==3")
}
//拿登录密码做一个举例:
var userpwd int =123 //我自己定义的密码
var upd int =123 //假设用户自己输入的密码
if userpwd == upd {
fmt.Println("我密码正确了!!!!!我成功了")
//反之如果不相等就不会进入花括号里面来,也就不会运行这里面的代码
}
2. if … else
if a:=3; a==4{
fmt.Println("a==4")
}else{
//左大括号必须和条件语句或else在同一行
fmt.Println("a!=4")
}
//拿登录密码做一个举例:
var userpwd int =123 //我自己定义的密码
var upd int =123456 //假设用户自己输入的密码
if upd==userpwd{
//上面这一行的意思(如果用户输入的密码等于了我自己设定的密码那就让他进来)
//那么我就可以进入到这个花括号里面做点事情
//比如打印
fmt.Println("我密码正确了!!!!!我成功了")
//反之如果不相等就不会进入花括号里面来,也就不会运行这里面的代码
}else{
//如果用户输入的密码和我定义的密码不一样,他就不会进入上面那个花括号
//就会进入到我这里然后我就打印
fmt.Println("就这?密码都是错的)
}
3. if … else if … else
if a:=3; a>3 {
fmt.Println("a>3")
} else if a<3 {
fmt.Println("a<3")
} else if a==3 {
fmt.Println("a==3")
} else {
fmt.Println("error")
}
//上面代码的意思就是,我先定义一个a:=3的变量,然后去判断,从第一个开始,
//a大于3吗?很明显不大于,然后继续往下面走
//a小于3吗?很明显也不小于,然后继续往下走
//a等于3吗?对了a等于3然后他就会输出"a==3"
//我们假设定义的变量a:=4那么上面的条件都不满足他就会进入最后一个else
//就会打印"error"
二、 switch语句
Go里面switch
默认相当于每个case
最后带有break
,匹配成功后不会自动向下执行其他case
,而是跳出整个switch
,但是可以使用fallthrough
强制执行后面的case
代码:
var score int = 90
switch score {
case 90:
fmt.Println("A")
//fallthrough
case 80:
fmt.Println("B")
//fallthrough
case 50,60,70:
fmt.Println("C")
//fallthrough
default:
fmt.Println("D")
}
//其实和if语句是差不多的道理,switch 后面就写你的条件比如上面的分数
//然后进入带着分数进入第一个case,如果分数等于90那我就打印A如果不等于
//我就进入下一条case。如果全部都没有匹配的那我们就进入default
可以使用任何类型或表达式作为条件语句:
//1
switch s1:=90 ; s1{//初始化语句;条件
case 90:
fmt.Println("A")
case 80:
fmt.Println("B")
default:
fmt.Println("C")
}
//这里是一样的只是在switch 后面定义了一个初始化变量,switch s1:=90 其实就是
//不用到上面定义var s1 int =90,switch s1和switch s1:=90 是一样的道理
//2
var s2 int=90
switch{ //这里没有写条件
case s2 >= 90: //这里写判断语句
fmt.Println("A")
cases2 >= 80:
fmt.Println("B")
default:
fmt.Println("C")
}
//这里的话就用上了条件了,,switch后面就不用写变量了,直接写花括号就行,
//我们在case 后面去判断,就和if 后面加条件一抹一样
//3
switch s3 := 90;{ //只有初始化语句,没有条件
case s3 >= 90: //这里写判断语句
fmt.Println("A")
case s3 >= 80:
fmt.Println("B")
default:
fmt.Println("C")
}
//这里就是结合了初始化变量和条件语句
三、 区别
-
if-else
语句更适合于对区间(范围)的判断,而switch
语句更适合于对离散值的判断。 -
switch
语句只支持常量值相等的分支判断,而if
语句支持更为灵活,任意布尔表达式均可。 -
switch
语句通常比一系列嵌套if
语句效率更高;逻辑更加清晰。