关系运算符
运算符 | 解释 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
>= | 大于或等于 |
< | 小于 |
<= | 小于或等于 |
优先级
算数运算符 > 关系运算符 > 赋值运算符
单分支控制
if 条件表达式 {
代码块
}
双分支控制
if 条件表达式 {
代码块
} else {
代码块
}
多分支控制
if 条件表达式 {
代码块
} else if 条件表达式 {
代码块
} else {
代码块
}
分支嵌套
if 条件表达式 {
if 条件表达式 {
代码块
} else {
代码块
}
} else {
代码块
}
例子
package main
import "fmt"
func main() {
var number int
fmt.Scanln(&number)
if number > 10 {
fmt.Printf("您输入的数字是%v, 大于10\n", number)
} else if number < 10 {
// 嵌套双分支
if number > 5 {
fmt.Printf("您输入的数字是%v, 小于10, 大于5\n", number)
} else {
fmt.Printf("您输入的数字是%v, 小于或等于5\n", number)
}
} else {
fmt.Printf("您输入的数字是%v, 等于10\n", number)
}
}
switch-case
switch语句可以看作是一种基于计算的跳转,计算控制表达式的之后,程序会跳转到相匹配的case(分支标号处),分支标号只是说明switch内部位置的路标,case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行(在C语言中在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case中去,直到遇到一个break,或着switch结束为止,go做了改进)
switch 控制表达式 {
case 表达式1:
语句...
case 表达式2,表达式3:
语句...
default:
语句...
}
- 控制表达式的结果控制着表达式的类型,数据类型必须保持一致。
- case后可接多个表达式,常量,变量,函数返回值等等以逗号分隔,case时只看表达式的最后结果。
- case后的值不能重复。
package main
import "fmt"
func main() {
var number int
fmt.Scanln(&month)
switch month {
case 3, 4, 5:
fmt.Println("Hello 春天!")
case 6, 7, 8:
fmt.Println("Hello 夏天!")
case 9, 10, 11:
fmt.Println("Hello 秋天!")
case 12, 1, 2:
fmt.Println("Hello 冬天!")
default:
fmt.Println("请输入1~12的整数!")
}
}
switch可不接表达式
switch {
case 条件表达式1:
语句...
case 条件表达式2,条件表达式3:
语句...
default:
语句...
}
- switch后不接表达式时,case后的值只能为bool类型;
- case后可接多个条件表达式,以逗号分隔。
package main
import "fmt"
func main() {
var number int
fmt.Scanln(&number)
switch {
case number > 7:
fmt.Println("Hello case number > 5")
case number < 5, number > 6:
fmt.Println("Hello case number < 5, number > 6")
// 使得当前分支执行结束之后,会执行下一个分支的代码
fallthrough
// ERROR
// case 7:
// fmt.Println("Hello case case 7")
case false:
// 正常情况下都不会进入, fallthroug可以强制执行
fmt.Println("Hello case false")
case true:
// fallthrough 只穿透下一个case, 这里不执行
fmt.Println("Hello case true")
// default:
// fmt.Println("Hello default")
}
}
tip: switch结构中default可以没有, fallthrough使得当前分支执行结束之后,会执行下一个分支的代码