目录
前言
本文将主要介绍if...else语句,switch语句以及select语句,三种条件语句的使用。
语句 | 描述 |
---|---|
if语句 | if 语句 由一个条件判断的布尔表达式后紧跟一个或多个语句组成。 |
if...else | if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。 |
if嵌套语句 | 可在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 |
switch语句 | switch 语句基于不同条件case,执行不同操作。 |
select语句 | select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 |
1. if语句
GO语言中if语句的基本语法格式如下:
if 条件表达式 {
/* 在条件表达式为 true 时执行 */
}
// 使用else的if语句
if 条件表达式 {
/* 在条件表达式为 true 时执行 */
} else {
/* 在条件表达式为 false 时执行 */
}
// if的嵌套使用
if 条件表达式 1 {
/* 在条件表达式 1 为 true 时执行 */
if 条件表达式 2 {
/* 在布尔表达式 2 为 true 时执行 */
}
}
具体逻辑如上图所示,左图为if语句逻辑流程,右图为if...else...语句流程。
示例代码:
package main
import "fmt"
func main() {
var a int = 520;
/* 判断布尔表达式 */
if a < 100 {
/* 如果条件为 true 则执行以下语句 */
fmt.Printf("a 小于 100\n" );
} else {
/* 如果条件为 false 则执行以下语句 */
fmt.Printf("a 不小于 100\n" ); // 本例执行此处else代码
}
fmt.Printf("a 的值为 : %d\n", a);
}
另外,在GO语言中,允许在 if
语句中直接声明变量,这个变量的作用域仅限于 if
语句块,同时你也可以使用 else if 进行多个条件判断:
package main
import "fmt"
func main() {
if score := 85;score >= 90 { // 声明条件判断的变量,同时进行条件判断
fmt.Println("Grade: A")
} else if score >= 80 {
fmt.Println("Grade: B") // 最终输出 Grade:B
} else if score >= 70 {
fmt.Println("Grade: C")
} else {
fmt.Println("Grade: F")
}
}
2. Switch语句
2.1 基本语法
switch
语句用于根据变量的值选择执行不同的代码块。它比多个 if-else if
更清晰,尤其适用于多个条件分支。基本语法如下:
switch variable {
case value1:
// 当 variable == value1 时执行的代码
case value2:
// 当 variable == value2 时执行的代码
default:
// 如果 variable 不匹配任何 case,执行默认代码
}
在 switch
语句中,case
的值必须是可比较的,并且不能重复。
其中variable变量并非必须,switch语句也可以不带变量,直接对表达式进行判断:
package main
import "fmt"
func main() {
var grade string = "B"
var marks int = 90
switch marks { // 对变量mark进行条件判断
case 90: grade = "A" // 本例触发此处条件,将grade赋值为A
case 80: grade = "B"
case 50,60,70 : grade = "C"
default: grade = "D"
}
switch { // 对变量grade进行条件判断,case判断中需写入对应变量名
case grade == "A" :
fmt.Printf("优秀!\n" )
case grade == "B", grade == "C" :
fmt.Printf("良好\n" ) // 本例输出 良好
case grade == "D" :
fmt.Printf("及格\n" )
case grade == "F":
fmt.Printf("不及格\n" )
default:
fmt.Printf("差\n" );
}
fmt.Printf("你的等级是 %s\n", grade );
}
2.2 fallthrough落穿
在 Go 中,switch
的每个 case
默认不会自动落穿到下一个 case
。相当于C语言中的switch语句,每个case后面加上了break。如果需要落穿,可以使用 fallthrough
关键字。使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
package main
import "fmt"
func main() {
i := 2
switch i {
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
fallthrough // 使用落穿,下一个case一定执行!
case 3:
fmt.Println("Three")
}
}
3.select语句
select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。由于select 语句只能用于通道(channel)操作,每个 case 必须是一个通道操作,具体内容可参考GO语言学习(14)并发编程当中的3.4小节。