ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

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

【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的表达式可以是任意类型(如int、string、interface{}等)。
  2. 代码风格:
    • 建议使用switch替代多层if-else,提高可读性。
    • case语句按优先级从高到低排列,default放在最后(可选)。
  3. 性能:
    • switch的底层实现为哈希表或跳转表,匹配效率高于链式if-else。

一、if 条件语句

1. 单条件模型

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

if布尔表达式{// 条件为 true 时执行}else{// 条件为 false 时执行}
packagemainimport"fmt"funcmain(){varaint=100ifa<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 时执行}elseif布尔表达式2{// 条件2为 true 时执行}else{// 所有条件不满足时执行}
varageint=18ifage<18{fmt.Println("nice")}elseifage<28{fmt.Println("beauty")// 输出此行}elseifage<38{fmt.Println("sexy")}else{fmt.Println("next")}

3. 条件嵌套与优化

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

packagemainimport"fmt"funcmain(){vara,bint=100,200ifa==100{// 外层条件ifb==200{// 内层条件fmt.Printf("a 的值为 100 , b 的值为 200\n")// 输出此行}}// 输出:a 值为 : 100,b 值为 : 200fmt.Printf("a 值为 : %d\n",a)fmt.Printf("b 值为 : %d\n",b)}

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

var(heightfloat32=1.9ageuint=30genderstring="male"passedbool)ifheight>1.8{ifage>25&&age<=35{ifgender=="male"{passed=true// 条件全部满足时标记通过}}}

优化后(提前返回):

ifheight<=1.8{return// 不满足身高条件,直接终止}ifage<=25||age>35{return// 不满足年龄条件,直接终止}ifgender!="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)funcmain(){gender:=1// Maleswitchgender{caseUnknown:fmt.Println("未知性别")caseMale:fmt.Println("男性")// 输出此行caseFemale:fmt.Println("女性")default:fmt.Println("无效性别")}}

2. fallthrough 穿透执行

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

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

输出结果:

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

3. break 终止执行

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

示例代码(审批流程)

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

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进