golang-基础-Go语言条件判断
Go语言的条件判断主要包括 if
语句和 switch
语句。它们是控制程序流程的核心工具,适用于从简单到复杂的条件逻辑处理。以下是详细的语法、适用场景和代码示例。
1. if
语句
1.1 基础语法
Go语言的 if
语句语法简洁,具有以下特点:
- 条件表达式无需括号(推荐省略)。
- 大括号
{}
必须存在,即使只有一行代码。 - 支持初始化语句,用于在条件判断前定义局部变量。
语法结构:
if 初始化语句; 条件表达式 {
// 条件为真时执行
} else if 另一个条件表达式 {
// 另一个条件为真时执行
} else {
// 所有条件为假时执行
}
1.2 适用场景
- 单条件判断:例如判断数值范围、布尔值。
- 多条件分支:通过
else if
实现多个条件的嵌套。 - 局部变量作用域优化:在
if
语句中定义临时变量,仅在当前块中有效。
1.3 代码示例
示例 1:基础条件判断
package main
import "fmt"
func main() {
age := 18
if age >= 18 {
fmt.Println("你已成年")
} else {
fmt.Println("你未成年")
}
}
示例 2:带初始化语句的 if
package main
import "fmt"
func main() {
if score := 95; score > 90 {
fmt.Println("成绩优秀")
} else if score > 80 {
fmt.Println("成绩良好")
} else {
fmt.Println("成绩需要改进")
}
}
示例 3:判断 Map 中的 Key 是否存在
package main
import "fmt"
func main() {
intMap := map[int]string{
1: "一",
2: "二",
3: "三",
}
key := 2
if value, ok := intMap[key]; ok {
fmt.Printf("Key %d 的值是 %s\n", key, value) //Key 2 的值是 二
} else {
fmt.Printf("Key %d 不存在\n", key)
}
}
1.4 注意事项
- 类型安全:条件表达式必须是布尔值,避免隐式转换(例如 C 语言中用
0
或非0
表示真假)。 - 错误处理:显式检查错误(如
if err != nil
),这是 Go 的常见实践。 - 避免误写赋值:Go 编译器会捕获
if x = 5
这类错误,强制使用==
判断相等。
2. switch
语句
2.1 基础语法
Go 的 switch
语句比其他语言更灵活,支持多种形式:
-
基于变量匹配:
switch 变量 { case 值1: // 匹配值1时执行 case 值2, 值3: // 匹配值2或值3时执行 default: // 默认情况 }
-
无变量匹配(基于表达式):
switch { case 表达式1: // 表达式1为真时执行 case 表达式2: // 表达式2为真时执行 default: // 默认情况 }
2.2 适用场景
- 多条件分支:当需要根据变量值或表达式结果选择多个分支时。
- 替代多个
if-else
:提高代码可读性和可维护性。 - 类型匹配:结合
type switch
判断接口变量的类型(后续扩展)。
2.3 代码示例
示例 1:基本 switch
用法
package main
import "fmt"
func main() {
grade := "B"
switch grade {
case "A":
fmt.Println("优秀")
case "B", "C":
fmt.Println("良好") //良好
case "D":
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
示例 2:无变量匹配的 switch
package main
import "fmt"
func main() {
day := 3
switch {
case day <= 5:
fmt.Println("工作日")
case day == 6 || day == 7:
fmt.Println("周末")
default:
fmt.Println("输入错误")
}
}
示例 3:使用 fallthrough
关键字
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("数字1")
fallthrough // 继续执行下一个 case
case 2:
fmt.Println("数字2")
fallthrough // 继续执行下一个 case
case 3:
fmt.Println("数字3")
default:
fmt.Println("其他数字")
}
}
2.4 注意事项
- 自动
break
:Go 的switch
在每个case
结束后自动break
,不会像 C/C++ 那样“穿透”到下一个case
。 - 显式
fallthrough
:如果需要执行下一个case
,必须使用fallthrough
关键字。 - 性能优化:
switch
语句在底层可能被编译器优化为跳转表,适合处理大量分支。
3. 适用场景对比
场景 | 推荐使用 |
---|---|
简单条件判断(如判断年龄、成绩) | if-else |
多条件分支(如星期判断、状态机) | switch |
检查 Map/切片元素是否存在 | if 带初始化语句 |
类型匹配(接口变量) | switch 结合 type |
复杂逻辑组合(涉及多个表达式) | switch 无变量匹配形式 |
4. 实际应用案例
案例 1:成绩等级判断
package main
import "fmt"
func main() {
var score int
fmt.Print("请输入成绩:")
fmt.Scan(&score)
if score >= 90 {
fmt.Println("等级:A")
} else if score >= 80 {
fmt.Println("等级:B")
} else if score >= 70 {
fmt.Println("等级:C")
} else if score >= 60 {
fmt.Println("等级:D")
} else {
fmt.Println("等级:F")
}
}
案例 2:星期几判断
package main
import "fmt"
func main() {
var day int
fmt.Print("请输入数字(1-7)代表星期几:")
fmt.Scan(&day)
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
case 4:
fmt.Println("星期四")
case 5:
fmt.Println("星期五")
case 6:
fmt.Println("星期六")
case 7:
fmt.Println("星期日")
default:
fmt.Println("输入错误,请输入1到7之间的数字")
}
}
5. 总结
if
语句:适合处理简单的条件分支,支持初始化语句和多级嵌套。switch
语句:适合多条件分支场景,语法简洁,支持fallthrough
控制流。- 最佳实践:
- 优先使用
switch
替代多个if-else
,提高可读性。 - 在
if
语句中定义临时变量,限制作用域。 - 显式处理错误(如
if err != nil
),确保程序健壮性。
- 优先使用
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果