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

【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.xdnf.cn/news/12551.html

相关文章:

  • PhpStorm代码编辑器内置数据库配置与使用
  • 学习设计模式《十二》——命令模式
  • VR视频制作有哪些流程?
  • Day46 Python打卡训练营
  • spark 执行 hive sql数据丢失
  • 89.实现添加收藏的功能的后端实现
  • 04 Deep learning神经网络编程基础 梯度下降 --吴恩达
  • ONLYOFFICE协作空间3.1.1 企业版 介绍及部署说明:家庭云计算专家
  • Git分布式版本控制工具
  • Grid 布局学习一
  • 矩阵QR分解
  • 有声书画本
  • 刷题记录(7)二叉树
  • WebRTC源码线程-1
  • 【Mini-F5265-OB开发板试用测评】显示RTC日历时钟
  • 在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
  • 视频的分片上传,断点上传
  • Java-IO流之压缩与解压缩流详解
  • 【图片识别Excel】批量提取图片中的文字,图片设置识别区域,识别后将文字提取并保存Excel表格,基于WPF和OCR识别的应用
  • kubeadm安装k8s
  • 消息队列处理模式:流式与批处理的艺术
  • 新华三H3CNE网络工程师认证—Easy IP
  • 3-12单元格区域边界定位实例(获取最后付款金额和月份)学习笔记
  • TDengine 替换 Hadoop,彻底解决数据丢失问题 !
  • B站的视频怎么下载下来——Best Video下载器
  • redis哨兵
  • Day46
  • 【Go语言基础【6】】字符串格式化说明
  • ai流式文字返回前端和php的处理办法
  • Mac下Android Studio扫描根目录卡死问题记录