Go 语言的控制结构:条件与循环

Go 语言提供了丰富的控制结构,使得开发者可以编写出具有复杂逻辑的程序。这些控制结构包括用于条件分支的 if-else 和 switch 语句,循环控制的 for 语句,以及用于控制循环执行流的 break 和 continue 关键字。此外,Go 语言还支持 goto 语句,允许跳转到程序的任意位置。


文章目录

      • 1、条件控制
        • [1.1、if-else 结构](#1.1、if-else 结构)
        • [1.2、switch 结构](#1.2、switch 结构)
        • [1.3、select 结构](#1.3、select 结构)
      • 2、循环控制
        • [2.1、for 结构](#2.1、for 结构)
        • [2.2、break 和 continue](#2.2、break 和 continue)
        • [2.3、goto 语句](#2.3、goto 语句)
      • 3、使用实例

1、条件控制

1.1、if-else 结构

Go 的 if-else 结构用于基于条件执行不同的代码块。这是最常见的条件控制结构,它不要求条件两侧的括号,这样简化了代码的视觉复杂度。例如:

go 复制代码
if condition {
    // 执行代码
} else {
    // 执行其他代码
}
1.2、switch 结构

switch 是另一种条件控制结构,用于基于不同的条件执行不同的代码块。switch 语句比多个 if-else 更清晰,易于管理。例如:

go 复制代码
switch var1 {
case val1:
    // 执行代码
case val2:
    // 执行其他代码
default:
    // 默认执行代码
}
1.3、select 结构

Go 语言特有的 select 结构,通常与 channel 操作配合使用,允许等待多个通道操作。

2、循环控制

2.1、for 结构

Go 语言中的 for 是唯一的循环结构,非常灵活,可用于创建各种循环:

go 复制代码
// 类似传统 for 循环
for init; condition; post { }

// 类似 while 循环
for condition { }

// 无限循环
for { }

使用 range 关键字,for 可以迭代数组、切片、字符串、map 或通道(channel)。这种迭代方式是处理集合数据的强大工具。

2.2、break 和 continue

break 可以终止最近的循环,continue 则跳过当前循环的剩余代码,直接开始下一次迭代。

2.3、goto 语句

虽然通常不推荐使用 goto 语句,因为它可能会使代码结构变得难以理解和维护,但在某些特定情况下,goto 可以提供一种方便的方式来跳出多重嵌套的循环。


3、使用实例

go 复制代码
package main

import (
    "fmt"
    "runtime"
)

func main() {
    // 示例:使用 if-else 结构
    num := 10
    if num%2 == 0 {
        fmt.Println(num, "is even")
    } else {
        fmt.Println(num, "is odd")
    }

    // 示例:使用 switch 结构
    os := runtime.GOOS
    switch os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    default:
        fmt.Printf("%s.\n", os)
    }

    // 示例:使用 for-range 结构
    strings := []string{"hello", "world"}
    for i, s := range strings {
        fmt.Println(i, s)
    }
}

这个概述展示了 Go 语言中控制结构的基本用法,实现了条件判断、循环控制和基于条件的代码执行,这些是任何复杂程序所必需的。通过上面的示例,我们可以看到 Go 语言在保持简洁语法的同时,也提供了强大的程序控制能力。

相关推荐
microrain5 小时前
读数是 1008,用电量是 8:SagooIoT 计算服务的增量口径与七种计算策略
物联网·golang·计算服务·sagooiot
看浪的路人7 小时前
第7讲:大模型后端服务化——Go 实现高并发 LLM Proxy / Router / Fallback
开发语言·后端·golang
灯澜忆梦10 小时前
【Go Zap 日志库】#1 |快速上手 + 配置详解
开发语言·后端·golang
不是万能的豆学长12 小时前
排查Go服务40天后的内存泄漏问题
开发语言·后端·golang·go
tachibana213 小时前
Go 语言 Map 的底层实现原理
开发语言·后端·golang·make
tachibana214 小时前
Go语言里slice是怎么扩容的?
后端·golang·go·切片
西瓜很甜哟14 小时前
golang实现大文件分片上传
后端·golang·html
tachibana21 天前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法
王中阳Go1 天前
Go 后端转 AI:非科班怎么补?一张 3 列路线表(可保存)
开发语言·人工智能·后端·python·golang·大语言模型
for_ever_love__1 天前
LangChain Agentic RAG:让 Agent 自己决定要不要检索、检索几次
人工智能·golang·langchain·rag·langgraph·agentic·自适应检索