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

news2025/6/7 11:47:24

文章目录

  • 零、概述
  • 一、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 main

import "fmt"

func main() {
    var a int = 100
    if a < 20 {
        fmt.Printf("a 小于 20\n")
    } else {
        fmt.Printf("a 不小于 20\n") // 输出此行
    }
    // 输出:a 的值为 : 100
    fmt.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 main

import "fmt"

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

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

var (
    height float32 = 1.9
    age    uint   = 30
    gender 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 // 0
    Male           // 1
    Female         // 2
)

func main() {
    gender := 1 // Male
    switch 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 = 150
	switch {
	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 需要终止流程 { // 假设条件为 true
        break // 终止 switch,不会执行 fallthrough
    }
    fallthrough // 若未 break,穿透到 case 2
case 2: // 复审
    fmt.Println("复审通过") // 仅当 approvalStatus=2 或 case 1 未 break 时执行
case 3: // 终审
    fmt.Println("终审通过")
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2402854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在 Windows 11 中永久更改默认浏览器:阻止 Edge 占据主导地位

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

量子比特实现方式

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

智慧水务发展迅猛:从物联网架构到AIoT系统的跨越式升级

AI大模型引领智慧水务迈入新纪元 2025年5月25日&#xff0c;水利部自主研发的“水利标准AI大模型”正式发布&#xff0c;它标志着水务行业智能化进程的重大突破。该模型集成1800余项水利标准、500余项法规及海量科研数据&#xff0c;支持立项、编制、审查等全流程智能管理&…

Java高级 | 【实验五】Spring boot+mybatis操作数据库

隶书文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…

在MATLAB中使用自定义的ROS2消息

简明结论&#xff1a; 无论ROS2节点和MATLAB运行在哪&#xff0c;MATLAB本机都必须拥有自定义消息源码并本地用ros2genmsg生成&#xff0c;才能在Simulink里订阅这些消息。只要你想让MATLAB或Simulink能识别自定义消息&#xff0c;必须把消息包源码(.msg等)拷到本机指定目录&a…

【MATLAB去噪算法】基于ICEEMDAN联合小波阈值去噪算法

ICEEMDAN联合小波阈值去噪算法相关文献 &#xff08;注&#xff1a;目前相关论文较少&#xff0c;应用该套代码可发直接一些水刊&#xff09; 一、CEEMDAN的局限性 模式残留噪声问题&#xff1a;原始CEEMDAN在计算每个IMF时直接对噪声扰动的信号进行模态分解并平均。 后果&a…

XXTEA,XTEA与TEA

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

机器人玩转之---嵌入式开发板基础知识到实战选型指南(包含ORIN、RDK X5、Raspberry pi、RK系列等)

1. 基础知识讲解 1.1 什么是嵌入式开发板&#xff1f; 嵌入式开发板是一种专门设计用于嵌入式系统开发的硬件平台&#xff0c;它集成了微处理器、内存、存储、输入输出接口等核心组件于单块印刷电路板上。与传统的PC不同&#xff0c;嵌入式开发板具有体积小、功耗低、成本适中…

腾讯云国际版和国内版账户通用吗?一样吗?为什么?

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

OrCAD X Capture CIS设计小诀窍系列第二季--03.如何在Capture中输出带有目录和元器件信息的PDF

背景介绍&#xff1a;我们在进行原理图设计时&#xff0c;经常需要输出PDF来查看或评审&#xff0c;但通过”Print”功能导出的PDF较为简单&#xff0c;只能查看设计视图&#xff1b;而通过使用Ghostscript软件可以输出带有目录和元器件信息的PDF&#xff0c;让设计师可以直接在…

汽车的安全性能测试:试验台铁地板的重要性

汽车的安全性能测试是非常重要的&#xff0c;其中试验台铁地板的设计和材料选择起着至关重要的作用。试验台铁地板是指在进行汽车碰撞、侧翻等试验时&#xff0c;用于支撑汽车底部和提供稳定支撑的重要部件。 在进行汽车碰撞试验时&#xff0c;试验台铁地板的设计和材料需要具…

实践指南:从零开始搭建RAG驱动的智能问答系统

LLM 赋能的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些是可以回答关于特定来源信息问题的应用程序。这些应用程序使用一种称为检索增强生成的技术&#xff0c;或 RAG。本文将展示如何基于 LangChain 构建一个简单的基于非结构化数据文本数据源的问答应用程序。 温…

边缘计算服务器

边缘计算服务器的核心要点解析&#xff0c;综合技术架构、应用场景与部署方案&#xff1a; 一、核心定义与技术特性‌ 本质定位‌ 部署在网络边缘侧的专用计算设备&#xff08;如工厂车间、智慧路灯等&#xff09;&#xff0c;直接处理终端设备&#xff08;传感器、摄像头等…

第R9周:阿尔茨海默病诊断(优化特征选择版)

文章目录 1. 导入数据2. 数据处理2.1 患病占比2.2 相关性分析2.3 年龄与患病探究 3. 特征选择4. 构建数据集4.1 数据集划分与标准化4.2 构建加载 5. 构建模型6. 模型训练6.1 构建训练函数6.2 构建测试函数6.3 设置超参数 7. 模型训练8. 模型评估8.1 结果图 8.2 混淆矩阵9. 总结…

电动螺丝刀-多实体拆图建模案例

多实体建模要注意下面两点&#xff1a; 多实体建模的合并结果一定要谨慎在实际工作中多实体建模是一个非常好的思路&#xff0c;先做产品的整体设计&#xff0c;再将个体零件导出去做局部细节设计 电动螺丝刀模型动图展示 爆炸视图动图展示 案例素材点击此处获取 建模步骤 1. …

当丰收季遇上超导磁测量:粮食产业的科技新征程

麦浪藏光阴&#xff0c;心田种丰年&#xff01;又到了一年中最令人心潮澎湃的粮食丰收季。金色的麦浪随风翻滚&#xff0c;沉甸甸的稻穗谦逊地低垂着&#xff0c;处处洋溢着丰收的喜悦。粮食产业&#xff0c;无疑是国家发展的根基与命脉&#xff0c;是民生稳定的压舱石。在现代…

电子电气架构 --- 什么是功能架构?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

AudioRelay 0.27.5 手机充当电脑音响

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【百款黑科技】&#xff1a;https://uc…

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析

NVIDIA Dynamo&#xff1a;数据中心规模的分布式推理服务框架深度解析 摘要 NVIDIA Dynamo是一个革命性的高吞吐量、低延迟推理框架&#xff0c;专为在多节点分布式环境中服务生成式AI和推理模型而设计。本文将深入分析Dynamo的架构设计、核心特性、代码实现以及实际应用示例&…

第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap

Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码&#xff1a; Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…