news 2026/6/12 8:31:39

深入浅出 Go 流程控制:从循环到延迟执行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入浅出 Go 流程控制:从循环到延迟执行

Go 语言的流程控制简洁而强大。不同于其他语言提供多种循环和复杂的条件判断,Go 遵循“少即是多”的原则,仅通过forifswitch和独特的defer就完成了所有逻辑构建。


1. 循环之王:for

在 Go 中,for是唯一的循环语句。它有几种不同的变体,涵盖了其他语言中forwhile的所有功能。

基础语法

标准的for循环由三部分组成,且不需要括号

Go

for i := 0; i < 10; i++ { sum += i }
  • 初始化语句:执行前运行(通常是短变量声明)。

  • 条件表达式:每次迭代前求值。

  • 后置语句:每次迭代后运行。

变体:Go 的 "while"

你可以省略初始化和后置语句,这时它就变成了其他语言中的while

Go

sum := 1 for sum < 1000 { sum += sum }

无限循环

如果省略循环条件,它就是死循环:

Go

for { // 除非 break 或 return,否则永远运行 }

2. 条件判断:ifelse

Go 的if语句与for类似:表达式不需要括号,但大括号{}是必须的

带有简短语句的if

这是一个非常实用的特性:你可以在条件表达式前执行一段简短的语句。该语句声明的变量作用域仅限于if及对应的else块内

Go

if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n", v, lim) } // 这里无法使用变量 v

3. 分支选择:switch

Go 的switch比 C 或 Java 更灵活,也更安全。

  • 自动 break:除非以fallthrough语句结尾,否则代码执行完选中的case后会自动终止,不需要显式写break

  • 任意值case的值不局限于整数或常量。

  • 无条件 switch:如果省略 switch 后的表达式,它等同于switch true,可以作为更整洁的if-then-else链使用。

Go

switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: fmt.Printf("%s.\n", os) }

4. 延迟执行:defer

defer是 Go 的一大特色。它会将函数的执行推迟到外层函数返回(return)之后立即执行。

基本用法

常用于关闭文件句柄、解锁资源等清理工作:

Go

func main() { defer fmt.Println("world") fmt.Println("hello") } // 输出顺序:hello -> world

延迟栈(Stacking defers)

如果你在一个函数内多次调用defer,它们会按照**后进先出(LIFO)**的顺序执行。

Go

for i := 0; i < 3; i++ { defer fmt.Print(i) } // 输出结果为:2 1 0

📝 总结表

关键字核心要点视觉提醒
forGo 唯一的循环,涵盖 for/while/forever🔁
if支持在判断前声明变量,大括号必选
switch默认自动 break,case 可以是任何表达式🎋
defer延迟执行,常用于资源释放,遵循 LIFO 栈顺序
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 11:05:31

Multisim安装全流程解析:适合初学者的系统学习

从零开始搞定Multisim安装&#xff1a;新手避坑指南与实战全流程 你是不是也经历过这样的场景&#xff1f; 刚下定决心学电路仿真&#xff0c;兴致勃勃地下载了Multisim&#xff0c;结果点开安装包不到三步就弹出“Error 1324”&#xff1b;或者装完启动时提示“缺少 msvcr12…

作者头像 李华
网站建设 2026/6/11 3:25:26

LangFlow Simple Analytics无Cookie分析

LangFlow Simple Analytics无Cookie分析 在AI应用开发日益普及的今天&#xff0c;越来越多团队开始尝试构建基于大语言模型&#xff08;LLM&#xff09;的智能系统。然而&#xff0c;一个现实问题摆在面前&#xff1a;如何在不牺牲数据隐私的前提下&#xff0c;快速验证复杂的L…

作者头像 李华
网站建设 2026/6/9 19:09:05

基于cc2530的ZigBee协议开发实战案例解析

从零构建ZigBee传感网络&#xff1a;CC2530实战开发全解析你有没有遇到过这样的场景&#xff1f;在部署几十个温湿度传感器时&#xff0c;布线复杂、维护困难&#xff0c;换一次电池就得拆一整套设备。而当你尝试用Wi-Fi或蓝牙组网时&#xff0c;又发现功耗太高、连接不稳定&am…

作者头像 李华
网站建设 2026/6/11 3:47:12

株洲YT23凿岩机高效稳定施工首选

在湖南中东部的工业重镇株洲&#xff0c;重型机械制造始终是区域经济的重要支柱。这里不仅交通便利、产业链成熟&#xff0c;还聚集了大量与矿山、基建相关的配套企业。在这样的产业土壤中&#xff0c;凿岩设备的需求长期稳定&#xff0c;尤其像YT23凿岩机这类经典机型&#xf…

作者头像 李华
网站建设 2026/6/11 2:45:03

Java 日期时间

Java 日期时间 Java 提供了多套日期时间 API&#xff0c;以下是主要类别的对比和常用方法总结&#xff1a; 类别主要类线程安全可变性Java 版本特点传统日期Date, Calendar&#xff0c;GregorianCalendar否可变1.0设计缺陷多&#xff0c;不推荐使用新日期时间LocalDate, Loca…

作者头像 李华
网站建设 2026/6/10 17:24:29

零基础学三极管开关电路:通俗解释工作原理

从零开始搞懂三极管开关电路&#xff1a;用“水龙头”讲清控制逻辑你有没有想过&#xff0c;为什么你的单片机只有3.3V、输出电流不到20mA&#xff0c;却能控制一个12V的继电器、甚至是一台小电机&#xff1f;这背后其实藏着一个电子世界里的“大力士”——三极管开关电路。它不…

作者头像 李华