news 2026/9/23 23:06:46

深入浅出 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/9/23 17:41:11

LangFlow Plausible轻量级隐私友好分析

LangFlow 与 Plausible&#xff1a;构建高效且负责任的 AI 应用实践 在当今快速演进的技术生态中&#xff0c;AI 应用的开发效率和用户数据隐私正成为开发者必须同时面对的两大命题。一方面&#xff0c;大型语言模型&#xff08;LLM&#xff09;的爆发让智能客服、自动问答、内…

作者头像 李华
网站建设 2026/9/23 11:19:53

LangFlow DebugBear网页性能测试

LangFlow 与 DebugBear&#xff1a;构建高效、流畅的 AI 应用开发闭环 在当今 AI 工程化浪潮中&#xff0c;一个核心矛盾日益凸显&#xff1a;大语言模型&#xff08;LLMs&#xff09;的能力越来越强&#xff0c;但将其整合为可用系统的过程却依然复杂。开发者需要连接模型、提…

作者头像 李华
网站建设 2026/9/24 10:59:28

LangFlow Airbrake快速定位代码缺陷

LangFlow Airbrake快速定位代码缺陷 在构建基于大语言模型&#xff08;LLM&#xff09;的应用时&#xff0c;开发者常常面临一个尴尬的现实&#xff1a;明明逻辑清晰、组件齐全&#xff0c;流程却在某个节点突然“卡住”&#xff0c;输出为空或报错信息晦涩难懂。传统调试方式依…

作者头像 李华
网站建设 2026/9/23 9:50:53

掌握大数据领域 Hive 的动态分区技术

掌握大数据领域 Hive 的动态分区技术 关键词:Hive 动态分区、大数据处理、数据仓库优化、ETL 自动化、分区表管理、数据分区策略、Hadoop 生态 摘要:在大数据处理场景中,Hive 的动态分区技术是实现高效数据管理和灵活 ETL 流程的关键工具。本文从核心概念出发,深入解析动态…

作者头像 李华
网站建设 2026/9/24 18:20:52

差模电感的作用与滤波性能深度剖析

差模电感如何“驯服”高频噪声&#xff1f;从原理到实战的深度拆解你有没有遇到过这样的情况&#xff1a;明明电路设计没问题&#xff0c;MCU却时不时复位&#xff1b;EMI测试一做&#xff0c;传导发射在150kHz或几MHz处直接超标&#xff1b;电源输入纹波大得像心电图……这些看…

作者头像 李华
网站建设 2026/9/24 12:38:57

LangFlow vRealize Operations VMware环境优化

LangFlow vRealize Operations VMware环境优化 在企业IT运维日益复杂的今天&#xff0c;面对成千上万条监控指标和频繁触发的告警信息&#xff0c;运维团队常常陷入“数据过载”的困境。尤其是在VMware虚拟化环境中&#xff0c;vRealize Operations&#xff08;vROps&#xff…

作者头像 李华