news 2026/5/1 7:32:02

深入浅出 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/4/18 7:54:58

提升效率:Proteus与Keil C51协同调试51单片机技巧

从代码到现象&#xff1a;用Proteus Keil C51打通51单片机开发的“任督二脉”你有没有过这样的经历&#xff1f;写完一段控制LED闪烁的程序&#xff0c;烧进芯片后灯却不亮。万用表测电压、示波器抓波形、反复改代码……折腾半天才发现是自己把低电平有效当成高电平了。在传统…

作者头像 李华
网站建设 2026/4/29 18:54:17

jscope时序数据分析技巧:系统学习指南

让信号“说话”&#xff1a;用 jscope 玩转嵌入式时序调试你有没有过这样的经历&#xff1f;代码逻辑明明没问题&#xff0c;但电机就是不转&#xff1b;SPI通信偶尔丢包&#xff0c;示波器上看又一切正常&#xff1b;PID控制总是在临界点震荡&#xff0c;却说不清问题出在响应…

作者头像 李华
网站建设 2026/4/14 9:21:46

从零开始学SMBus协议:典型应用场景简介

从零开始学SMBus协议&#xff1a;不只是“更严格的IC”&#xff0c;而是系统管理的智慧中枢你有没有想过&#xff0c;笔记本电脑是如何准确告诉你“还剩37%电量”并预测“还能用1小时23分钟”的&#xff1f;又或者&#xff0c;服务器在高温预警时为何能立刻降频保护硬件&#x…

作者头像 李华
网站建设 2026/4/30 13:40:33

LangFlow Salesforce Health Cloud

LangFlow 与 Salesforce Health Cloud&#xff1a;可视化构建医疗 AI 工作流的实践探索 在智能医疗系统日益复杂的今天&#xff0c;如何让大语言模型&#xff08;LLM&#xff09;真正落地于临床业务流程&#xff0c;而不是停留在实验室原型阶段&#xff1f;这不仅是技术挑战&am…

作者头像 李华
网站建设 2026/4/29 14:03:15

水上乐园涂料哪种材料好用?深度解析行业痛点与技术方案

行业痛点分析 水上乐园运营方面临着一个普遍难题&#xff1a;常规地坪涂料难以承受长期水浸和频繁冲击。许多场地开业不到两年就出现涂层起泡脱落现象。这不仅影响美观&#xff0c;更存在安全隐患。游客在湿滑地面上容易摔倒&#xff0c;运营方每年都要投入大量资金进行修补。更…

作者头像 李华
网站建设 2026/4/30 21:51:44

LangFlow Mixpanel用户行为分析

LangFlow Mixpanel&#xff1a;构建会“思考”的AI开发工具 在AI应用开发日益普及的今天&#xff0c;一个现实问题摆在开发者面前&#xff1a;如何快速验证一个基于大语言模型&#xff08;LLM&#xff09;的想法&#xff1f;传统方式需要写大量代码、调试依赖关系、反复运行测…

作者头像 李华