【Go语言基础【7】】条件语句
文章目录
- 零、概述
- 一、if 条件语句
- 1. 单条件模型
- 2. 多条件模型(else if)
- 3. 条件嵌套与优化
- 二、switch 条件判断
- 1. 基本用法
- 2. fallthrough 穿透执行
- 3. break 终止执行
零、概述
语句类型 | 适用场景 | 核心特点 |
---|---|---|
if-else | 单条件或简单多条件判断 | 逻辑清晰,适合线性条件判断 |
switch | 多值匹配或复杂条件组合 | 支持值匹配、范围匹配和表达式匹配,fallthrough 可灵活控制执行流程 |
嵌套 if | 层级依赖的条件判断 | 需控制嵌套深度,优先使用提前返回优化代码结构 |
注意:
- 条件表达式类型:
if
后必须是布尔表达式(如a > 10
),不能是数值(如if a
不合法)。switch
的表达式可以是任意类型(如int
、string
、interface{}
等)。
- 代码风格:
- 建议使用
switch
替代多层if-else
,提高可读性。 case
语句按优先级从高到低排列,default
放在最后(可选)。
- 建议使用
- 性能:
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. 条件嵌套与优化
在 if
或 else 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 表达式 {
case 值1, 值2: // 匹配值1或值2// 执行逻辑
case 值3:// 执行逻辑
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("终审通过")
}
相关文章:
【Go语言基础【7】】条件语句
文章目录 零、概述一、if 条件语句1. 单条件模型2. 多条件模型(else if)3. 条件嵌套与优化 二、switch 条件判断1. 基本用法2. fallthrough 穿透执行3. break 终止执行 零、概述 语句类型适用场景核心特点if-else单条件或简单多条件判断逻辑清晰&#x…...
【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
目录 一、选择排序回顾 二、冒泡排序回顾 三、插入排序回顾 四、计数排序回顾 五、归并排序回顾 六、快速排序回顾 七、桶排序回顾 八、基数排序 九、堆排序 十、希尔排序 十一、十大排序算法对比 十二、各算法详解与应用场景 1. 选择排序(Selection Sortÿ…...
解决神经网络输出尺寸过小的实战方案
训练CIFAR10分类模型时出现报错:RuntimeError: Given input size: (256x1x1). Calculated output size: (256x0x0). Output size is too small。该问题由网络结构设计缺陷导致图像尺寸过度缩小引发。 核心原因分析 网络结构缺陷 原始模型采用六层卷积层,…...
Python备忘
1. 自定义多线程程序: import concurrent.futures import threadingclass CustomThreadPool:def __init__(self, max_workers):self.max_workers max_workersself.pool concurrent.futures.ThreadPoolExecutor(max_workers)self.running_num 0self.semaphore t…...

如何在 Windows 11 中永久更改默认浏览器:阻止 Edge 占据主导地位
在 Windows 11 中更改默认浏览器对于新手或技术不太熟练的用户来说可能会令人沮丧。 为什么要在 Windows 11 中更改默认浏览器? 这是一个重要的问题:你为什么要从 Microsoft Edge 切换过来? 生态系统集成:如果你已经在广泛使用 Google 服务,Chrome 可以提供无缝集成。同…...

量子比特实现方式
经典计算机是通过电子电路运转起来的。使用硅制半导体制成的名为晶体管的小元件发挥了开关的作用,将其与金属布线组合起来即可实现逻辑门,再将逻辑门集成起来就能制造出经典计算机。量子计算机的制造过程则要复杂许多,因为量子计算机既需要量…...

智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级
AI大模型引领智慧水务迈入新纪元 2025年5月25日,水利部自主研发的“水利标准AI大模型”正式发布,它标志着水务行业智能化进程的重大突破。该模型集成1800余项水利标准、500余项法规及海量科研数据,支持立项、编制、审查等全流程智能管理&…...
1、cpp实现Python的print函数
实现一 #include <iostream> #include <list> #include <string>using namespace std;// 定义一个空的print函数,作为递归终止条件 void print(){// };// 可变参数模板函数,用于递归输出传入的参数 template <typename T, typenam…...
【Linux基础知识系列】第十四篇-系统监控与性能优化
一、简介 随着信息技术的飞速发展,Linux系统在服务器领域占据着重要地位。无论是web服务器、数据库服务器还是文件服务器,都需要高效的运行以满足业务需求。系统监控与性能优化是确保Linux系统稳定、高效运行的关键任务。通过实时监测系统资源的使用情况…...
云原生思维重塑数字化基座:从理念到实践的深度剖析
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生为何成为数字化的“基础设施语言”? 随着5G、人工智能、物联网等技术逐步进入规模化落地阶段&am…...
Animate On Scroll 用于在用户滚动页面时实现元素的动画效果
AOS (Animate On Scroll) 详细介绍 什么是AOS? AOS(Animate On Scroll)是一个轻量级的JavaScript库,用于在用户滚动页面时实现元素的动画效果。它允许网页元素在进入或离开视口(viewport)时触发各种CSS动…...

Java高级 | 【实验五】Spring boot+mybatis操作数据库
隶书文章:Java高级 | (二十二)Java常用类库-CSDN博客 系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...
[蓝桥杯]搭积木
搭积木 题目描述 小明对搭积木非常感兴趣。他的积木都是同样大小的正立方体。 在搭积木时,小明选取 mm 块积木作为地基,将他们在桌子上一字排开,中间不留空隙,并称其为第 0 层。 随后,小明可以在上面摆放第 1 层&a…...

在MATLAB中使用自定义的ROS2消息
简明结论: 无论ROS2节点和MATLAB运行在哪,MATLAB本机都必须拥有自定义消息源码并本地用ros2genmsg生成,才能在Simulink里订阅这些消息。只要你想让MATLAB或Simulink能识别自定义消息,必须把消息包源码(.msg等)拷到本机指定目录&a…...
使用C/C++和OpenCV实现图像拼接
使用 C 和 OpenCV 实现图像拼接 本文将详细介绍如何利用 OpenCV 库,在 C 环境中实现图像拼接。图像拼接技术可以将多张具有重叠区域的图像合成为一张高分辨率的全景图。OpenCV 提供了一个功能强大的 Stitcher 类,它封装了从特征点检测、匹配到图像融合的…...
神经网络-Day46
目录 一、 什么是注意力二、 特征图的提取2.1 简单CNN的训练2.2 特征图可视化 三、通道注意力3.1 通道注意力的定义3.2 模型的重新定义(通道注意力的插入) 一、 什么是注意力 注意力机制,本质从onehot-elmo-selfattention-encoder-bert这就是…...
Ubuntu中常用的网络命令指南
Ubuntu中常用的网络命令指南 在Ubuntu系统中,网络管理是日常运维和故障排查的核心技能。 🛠️ 基础网络诊断 ping - 测试网络连通性 ping google.com # 持续测试 ping -c 4 google.com # 发送4个包后停止traceroute / tracepath - 追踪数据包路径 …...
JVM——如何打造一个类加载器?
引入 在Java应用程序的生命周期中,类加载器扮演着至关重要的角色。它是Java运行时环境的核心组件之一,负责在需要时动态加载类文件到JVM中。理解类加载器的工作原理以及如何自定义类加载器,不仅可以帮助我们更好地管理应用程序的类加载过程&…...

【MATLAB去噪算法】基于ICEEMDAN联合小波阈值去噪算法
ICEEMDAN联合小波阈值去噪算法相关文献 (注:目前相关论文较少,应用该套代码可发直接一些水刊) 一、CEEMDAN的局限性 模式残留噪声问题:原始CEEMDAN在计算每个IMF时直接对噪声扰动的信号进行模态分解并平均。 后果&a…...
c++ Base58编码解码
Base58 字符集 Base58 使用 58 个字符进行编码,字符集为:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz。注意:0(零)、O(大写字母O)、I(大写字母I)和 l&a…...
证券交易柜台系统解析与LinkCounter解决方案开发实践
第一章 证券交易柜台系统基础解析 1.1 定义与行业定位 证券交易柜台系统(Trading Counter System)是券商经纪业务的核心支撑平台,承担投资者指令传输、风险控制、清算结算等职能。根据中国证监会《证券期货业网络信息安全管理办法》要求&am…...

XXTEA,XTEA与TEA
TEA、XTEA和XXTEA都是分组加密算法,它们在设计、安全性、性能等方面存在显著区别。以下是它们的主要区别: 密钥长度 TEA:使用128位密钥。 XTEA:通常使用128位或256位密钥。 XXTEA:密钥长度更灵活,可以使用任…...

机器人玩转之---嵌入式开发板基础知识到实战选型指南(包含ORIN、RDK X5、Raspberry pi、RK系列等)
1. 基础知识讲解 1.1 什么是嵌入式开发板? 嵌入式开发板是一种专门设计用于嵌入式系统开发的硬件平台,它集成了微处理器、内存、存储、输入输出接口等核心组件于单块印刷电路板上。与传统的PC不同,嵌入式开发板具有体积小、功耗低、成本适中…...

腾讯云国际版和国内版账户通用吗?一样吗?为什么?
在当今全球化的数字化时代,云计算服务成为众多企业和个人拓展业务、存储数据的重要选择。腾讯云作为国内领先的云服务提供商,其国际版和国内版备受关注。那么,腾讯云国际版和国内版账户是否通用?它们究竟一样吗?背后又…...

OrCAD X Capture CIS设计小诀窍系列第二季--03.如何在Capture中输出带有目录和元器件信息的PDF
背景介绍:我们在进行原理图设计时,经常需要输出PDF来查看或评审,但通过”Print”功能导出的PDF较为简单,只能查看设计视图;而通过使用Ghostscript软件可以输出带有目录和元器件信息的PDF,让设计师可以直接在…...

汽车的安全性能测试:试验台铁地板的重要性
汽车的安全性能测试是非常重要的,其中试验台铁地板的设计和材料选择起着至关重要的作用。试验台铁地板是指在进行汽车碰撞、侧翻等试验时,用于支撑汽车底部和提供稳定支撑的重要部件。 在进行汽车碰撞试验时,试验台铁地板的设计和材料需要具…...
Lua和JS的垃圾回收机制
Lua 和 JavaScript 都采用了 自动垃圾回收机制(GC) 来管理内存,开发者无需手动释放内存,但它们的 实现机制和行为策略不同。下面我们从原理、策略、优缺点等方面来详细对比: 🔶 1. 基本原理对比 特性LuaJa…...

实践指南:从零开始搭建RAG驱动的智能问答系统
LLM 赋能的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些是可以回答关于特定来源信息问题的应用程序。这些应用程序使用一种称为检索增强生成的技术,或 RAG。本文将展示如何基于 LangChain 构建一个简单的基于非结构化数据文本数据源的问答应用程序。 温…...

边缘计算服务器
边缘计算服务器的核心要点解析,综合技术架构、应用场景与部署方案: 一、核心定义与技术特性 本质定位 部署在网络边缘侧的专用计算设备(如工厂车间、智慧路灯等),直接处理终端设备(传感器、摄像头等…...
矩阵的偏导数
设 X ( x i j ) m n X (x_{ij})_{m \times n} X(xij)mn,函数 f ( X ) f ( x 11 , x 12 , … , x 1 n , x 21 , … , x m n ) f(X) f(x_{11}, x_{12}, \ldots, x_{1n}, x_{21}, \ldots, x_{mn}) f(X)f(x11,x12,…,x1n,x21,…,xmn) 是一个 m n…...