当前位置: 首页 > article >正文

【Go语言基础【7】】条件语句

文章目录

  • 零、概述
  • 一、if 条件语句
    • 1. 单条件模型
    • 2. 多条件模型(else if)
    • 3. 条件嵌套与优化
  • 二、switch 条件判断
    • 1. 基本用法
    • 2. fallthrough 穿透执行
    • 3. break 终止执行

零、概述

语句类型适用场景核心特点
if-else单条件或简单多条件判断逻辑清晰,适合线性条件判断
switch多值匹配或复杂条件组合支持值匹配、范围匹配和表达式匹配,fallthrough 可灵活控制执行流程
嵌套 if层级依赖的条件判断需控制嵌套深度,优先使用提前返回优化代码结构

注意:

  1. 条件表达式类型
    • if 后必须是布尔表达式(如 a > 10),不能是数值(如 if a 不合法)。
    • switch 的表达式可以是任意类型(如 intstringinterface{} 等)。
  2. 代码风格
    • 建议使用 switch 替代多层 if-else,提高可读性。
    • case 语句按优先级从高到低排列,default 放在最后(可选)。
  3. 性能
    • switch 的底层实现为哈希表或跳转表,匹配效率高于链式 if-else

 

一、if 条件语句

1. 单条件模型

通过布尔表达式判断是否执行对应代码块,else 块处理条件为 false 的情况。

if 布尔表达式 {// 条件为 true 时执行
} else {// 条件为 false 时执行
}
package mainimport "fmt"func main() {var a int = 100if a < 20 {fmt.Printf("a 小于 20\n")} else {fmt.Printf("a 不小于 20\n") // 输出此行}// 输出:a 的值为 : 100fmt.Printf("a 的值为 : %d\n", a)
}

 

2. 多条件模型(else if)

按顺序判断多个条件,匹配到第一个 true 的条件即执行对应代码块。

if 布尔表达式1 {// 条件1为 true 时执行
} else if 布尔表达式2 {// 条件2为 true 时执行
} else {// 所有条件不满足时执行
}

 

var age int = 18
if age < 18 {fmt.Println("nice")
} else if age < 28 {fmt.Println("beauty") // 输出此行
} else if age < 38 {fmt.Println("sexy")
} else {fmt.Println("next")
}

 

3. 条件嵌套与优化

ifelse if 块中嵌套其他条件语句,但需注意嵌套深度不宜过高,否则影响可读性。

package mainimport "fmt"func main() {var a, b int = 100, 200if a == 100 { // 外层条件if b == 200 { // 内层条件fmt.Printf("a 的值为 100 , b 的值为 200\n") // 输出此行}}// 输出:a 值为 : 100,b 值为 : 200fmt.Printf("a 值为 : %d\n", a)fmt.Printf("b 值为 : %d\n", b)
}

优化嵌套(提前返回)
原嵌套代码

var (height float32 = 1.9age    uint   = 30gender string = "male"passed bool
)if height > 1.8 {if age > 25 && age <= 35 {if gender == "male" {passed = true // 条件全部满足时标记通过}}
}

优化后(提前返回)

if height <= 1.8 {return // 不满足身高条件,直接终止
}
if age <= 25 || age > 35 {return // 不满足年龄条件,直接终止
}
if gender != "male" {return // 不满足性别条件,直接终止
}
passed = true // 所有条件通过

 

二、switch 条件判断

适用于多值匹配场景,比 if-else 更简洁清晰,支持值匹配、范围匹配和表达式匹配。

1. 基本用法

switch 后可跟变量或表达式,case 后跟具体值或逗号分隔的多个值,default 处理未匹配的情况。

switch 表达式 {
case1,2: // 匹配值1或值2// 执行逻辑
case3:// 执行逻辑
default: // 可选,未匹配任何 case 时执行// 执行逻辑
}
const (Unknown = iota // 0Male           // 1Female         // 2
)func main() {gender := 1 // Maleswitch gender {case Unknown:fmt.Println("未知性别")case Male:fmt.Println("男性") // 输出此行case Female:fmt.Println("女性")default:fmt.Println("无效性别")}
}

 

2. fallthrough 穿透执行

默认情况下,case 匹配后自动终止 switch。若需要继续执行下一个 case,使用 fallthrough(注意:会忽略下一个 case 的条件检查)。

var score = 130 func main() {score = 150switch {case score >= 100: // 匹配条件fmt.Println("奖励 100 金币")fallthrough // 穿透到下一个 case(不检查条件)case score > 150: // 无论条件是否成立,都会执行(因穿透)fmt.Println("额外奖励 50 经验值") // 输出此行fallthrough                // 继续穿透case score >= 200:fmt.Println("再奖励 1 个道具") // 积分 150 不满足条件,但因穿透仍执行default:fmt.Println("无奖励")}
}

输出结果

奖励 100 金币
额外奖励 50 经验值
再奖励 1 个道具

 

3. break 终止执行

case 中使用 break 可提前终止 switch,即使存在 fallthrough 也不会继续执行。

示例代码(审批流程)

var approvalStatus int = 2 // 复审阶段switch approvalStatus {
case 1: // 初审fmt.Println("初审通过")if 需要终止流程 { // 假设条件为 truebreak // 终止 switch,不会执行 fallthrough}fallthrough // 若未 break,穿透到 case 2
case 2: // 复审fmt.Println("复审通过") // 仅当 approvalStatus=2 或 case 1 未 break 时执行
case 3: // 终审fmt.Println("终审通过")
}

 

http://www.lryc.cn/news/2402854.html

相关文章:

  • 【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
  • 解决神经网络输出尺寸过小的实战方案
  • Python备忘
  • 如何在 Windows 11 中永久更改默认浏览器:阻止 Edge 占据主导地位
  • 量子比特实现方式
  • 智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
  • 1、cpp实现Python的print函数
  • 【Linux基础知识系列】第十四篇-系统监控与性能优化
  • 云原生思维重塑数字化基座:从理念到实践的深度剖析
  • Animate On Scroll 用于在用户滚动页面时实现元素的动画效果
  • Java高级 | 【实验五】Spring boot+mybatis操作数据库
  • [蓝桥杯]搭积木
  • 在MATLAB中使用自定义的ROS2消息
  • 使用C/C++和OpenCV实现图像拼接
  • 神经网络-Day46
  • Ubuntu中常用的网络命令指南
  • JVM——如何打造一个类加载器?
  • 【MATLAB去噪算法】基于ICEEMDAN联合小波阈值去噪算法
  • c++ Base58编码解码
  • 证券交易柜台系统解析与LinkCounter解决方案开发实践
  • XXTEA,XTEA与TEA
  • 机器人玩转之---嵌入式开发板基础知识到实战选型指南(包含ORIN、RDK X5、Raspberry pi、RK系列等)
  • 腾讯云国际版和国内版账户通用吗?一样吗?为什么?
  • OrCAD X Capture CIS设计小诀窍系列第二季--03.如何在Capture中输出带有目录和元器件信息的PDF
  • 汽车的安全性能测试:试验台铁地板的重要性
  • Lua和JS的垃圾回收机制
  • 实践指南:从零开始搭建RAG驱动的智能问答系统
  • 边缘计算服务器
  • 矩阵的偏导数
  • 第R9周:阿尔茨海默病诊断(优化特征选择版)