网站首页 > 精选文章 / 正文
一、if-else语句
功能:根据条件执行不同的代码块。
特点:
- 条件表达式不需要括号,但代码块必须用花括号 {}。
- 支持在条件前执行简单语句(如变量初始化)。
- 支持 else if 多分支。
语法:
if 初始化语句; 条件表达式 {
// 条件为 true 时执行
} else if 条件 {
// 其他条件
} else {
// 默认分支
}
示例:
// 判断数字正负
num := -5
if num > 0 {
fmt.Println("正数")
} else if num < 0 {
fmt.Println("负数")
} else {
fmt.Println("零")
}
// 条件前初始化变量
if x := 10; x%2 == 0 {
fmt.Println("x是偶数")
} else {
fmt.Println("x是奇数")
}
二、for循环
功能:Go 中唯一的循环结构,支持多种循环形式。
特点:
- 三段式(初始化、条件、后置操作)。
- 类似 while 的单一条件形式。
- 无限循环(需内部 break 退出)。
语法:
// 三段式(传统 for 循环)
for 初始化; 条件; 后置操作 {
// 循环体
}
// 类似 while 的循环
for 条件 {
// 循环体
}
// 无限循环
for {
// 需配合 break 退出
}
示例:
// 三段式:计算 1~10 的和
sum := 0
for i := 1; i <= 10; i++ {
sum += i
}
fmt.Println(sum) // 55
// 类似 while:循环直到满足条件
count := 0
for count < 5 {
fmt.Println(count)
count++
}
// 无限循环:读取输入直到用户退出
for {
var input string
fmt.Scanln(&input)
if input == "exit" {
break
}
fmt.Println("输入:", input)
}
三、switch语句
功能:多分支选择结构,替代复杂的 if-else。
特点:
- 每个 case 默认自动 break,无需手动添加。
- 支持任意类型的表达式(不限于常量或整数)。
- 支持 fallthrough 强制执行下一个 case。
语法:
switch 变量或表达式 {
case 值1, 值2:
// 匹配值1或值2时执行
case 值3:
// 匹配值3时执行
default:
// 默认分支
}
// 无表达式的 switch(等同于 if-else 链)
switch {
case 条件1:
// 条件1为 true 时执行
case 条件2:
// 条件2为 true 时执行
}
示例:
// 根据星期输出信息
day := "Tuesday"
switch day {
case "Monday":
fmt.Println("工作日开始")
case "Tuesday", "Wednesday":
fmt.Println("努力工作")
case "Saturday", "Sunday":
fmt.Println("休息日")
default:
fmt.Println("其他工作日")
}
// 使用表达式判断分数等级
score := 85
switch {
case score >= 90:
fmt.Println("A")
case score >= 80:
fmt.Println("B")
case score >= 70:
fmt.Println("C")
default:
fmt.Println("D")
}
// 使用 fallthrough
x := 10
switch x {
case 10:
fmt.Println("x=10")
fallthrough // 强制执行下一个 case
case 20:
fmt.Println("x=20")
}
// 输出:x=10 → x=20
四、for range循环
功能:遍历数组、切片、字符串、map 或通道(channel)。
特点:
- 返回索引和元素值(map 返回键值对)。
- 若不需要索引或值,可用 _ 忽略。
- 遍历 map 时顺序随机。
语法:
for 索引, 值 := range 集合 {
// 循环体
}
示例:
// 遍历切片
nums := []int{10, 20, 30}
for index, value := range nums {
fmt.Printf("索引:%d, 值:%d\n", index, value)
}
// 遍历字符串(获取 Unicode 码点)
str := "Go"
for i, c := range str {
fmt.Printf("位置:%d, 字符:%c\n", i, c)
}
// 遍历 map
ages := map[string]int{"Alice": 25, "Bob": 30}
for key, value := range ages {
fmt.Printf("%s 的年龄是 %d\n", key, value)
}
// 忽略索引或值
for _, value := range []int{1, 2, 3} {
fmt.Println(value)
}
五、控制结构的区别与适用场景
结构 | 用途 | 特点 | 示例场景 |
if-else | 条件分支判断 | 支持多分支和变量初始化,适合复杂条件组合 | 根据多个条件执行不同逻辑 |
for | 循环执行代码块 | 唯一循环结构,支持三段式、while 和无限循环 | 迭代计算、重复任务处理 |
switch | 多分支选择(替代复杂 if-else 链) | 代码更清晰,支持表达式和 fallthrough | 枚举值匹配、多条件值判断 |
for range | 遍历集合类型(切片、map 等) | 简化迭代过程,自动处理索引和值 | 遍历数组元素、处理键值对 |
六、关键区别总结
- if-else vs switch:
- if-else 更适合处理范围条件或复杂逻辑(如 score >= 80 && score < 90)。
- switch 在匹配固定值或多个离散值时更简洁,尤其是使用 case 列表时。
- for vs for range:
- for 是通用循环结构,适合需要手动控制迭代逻辑的场景。
- for range 专为遍历集合设计,自动处理索引和值,代码更简洁。
- switch 的灵活性:
- Go 的 switch 支持任意类型表达式,而 C/C++ 的 switch 仅支持整型常量。
- 通过 switch 无表达式形式(switch { ... }),可实现类似 if-else 链的功能。
七、综合示例
package main
import "fmt"
func main() {
// if-else 示例
if num := 7; num%2 == 0 {
fmt.Println("偶数")
} else {
fmt.Println("奇数")
}
// for 示例:计算阶乘
n := 5
fact := 1
for i := 1; i <= n; i++ {
fact *= i
}
fmt.Printf("%d! = %d\n", n, fact)
// switch 示例:类型判断
var value interface{} = 3.14
switch v := value.(type) {
case int:
fmt.Printf("整数: %d\n", v)
case float64:
fmt.Printf("浮点数: %f\n", v)
default:
fmt.Println("未知类型")
}
// for range 示例:遍历 map
colors := map[string]string{"red": "#FF0000", "green": "#00FF00"}
for key, hex := range colors {
fmt.Printf("%s 的十六进制是 %s\n", key, hex)
}
}
输出:
奇数
5! = 120
浮点数: 3.140000
red 的十六进制是 #FF0000
green 的十六进制是 #00FF00
八、最佳实践
- if 的简短语句:
在条件前初始化变量,限制变量作用域,避免命名冲突。
if file, err := os.Open("data.txt"); err == nil {
// 使用 file
} else {
fmt.Println("打开文件失败:", err)
}
- 避免 switch 滥用:
当逻辑简单时,优先使用 if-else;当需要匹配多个离散值时,使用 switch。 - for range 遍历通道:
可用于从通道持续接收值,直到通道关闭。
ch := make(chan int)
go func() {
ch <- 1
ch <- 2
close(ch)
}()
for v := range ch {
fmt.Println(v) // 输出 1 → 2
}
Tags:if else if else语句格式
- 上一篇:K8s服务编排
- 下一篇:干掉if...else,这几种写法更优雅!
猜你喜欢
- 2025-05-24 HarmonyOS NEXT条件语句和循环迭代
- 2025-05-24 if语句使用及用法
- 2025-05-24 python基础知识(二)
- 2025-05-24 简单学Python——关键字7——if、elif、else
- 2025-05-24 C语言速成之06条件语句深度解析:从if基础到工程实践
- 2025-05-24 昆仑通态(MCGS)HMI使用笔记(三)
- 2025-05-24 Linux Bash Shell学习之流程控制——if/else
- 2025-05-24 C/C++编程笔记:运算符—所有编程语言的基础!一文带你搞懂
- 2025-05-24 C语言学习笔记系列—第八章
- 2025-05-24 面试官:项目中的if else太多了,该怎么重构?