当前位置: 首页 > news >正文

深入浅出 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 栈顺序
http://www.jsqmd.com/news/126319/

相关文章:

  • 48、C 编程中的实用技巧与特性
  • LangFlow Mouseflow点击分布与滚动图
  • Multisim14仿真结果导入Ultiboard的实践方法
  • 49、C编程:从Main方法到嵌套类型的全面解析
  • LangFlow GoatCounter极简网页计数器
  • STM32CubeMX串口通信接收图解说明(小白友好)
  • LangFlow Airbrake快速定位代码缺陷
  • LangFlow PostHog开源产品分析
  • LangFlow Countly移动与Web分析
  • 基于模拟量读取的红外阵列:Arduino循迹小车核心要点
  • ESP32-CAM如何连接手机APP?一文说清通信机制(Arduino)
  • LangFlow Simple Analytics无Cookie分析
  • LangFlow Treo APMP性能监控
  • Intel HAXM安装失败?通俗解释每一步排查方法
  • LangFlow ThousandEyes网络智能洞察
  • 基于screen+的冗余HMI界面设计实战
  • ModbusTCP报文解析安全风险与防护建议
  • 掌握大数据领域 Hive 的动态分区技术
  • LangFlow vRealize Operations VMware环境优化
  • LangFlow UCloud UMeter监控体系
  • Keil C51中LCD1602初始化流程手把手教程
  • LangFlow可视化引擎详解:节点、连接与实时预览机制
  • cv2.cornerHarris() 详解(Harris 角点检测)
  • Expo项目结构深度剖析:系统学习
  • Multisim安装全流程解析:适合初学者的系统学习
  • HDMI转无线显示?手机控LED的技术边界探讨
  • 2026年AI证书报考:当“一篇攻略”遇上现实困境
  • 全面讲解Arduino Uno作品中雨滴传感器的应用方法
  • 高复杂度PCB样板的精密贴片制造流程解析
  • LangFlow DebugBear网页性能测试