go语言中流程控制语句

Go语言中的流程控制语句包括条件判断、循环和分支控制。以下是详细介绍:

1. 条件判断语句

if 语句

Go语言的 if 语句与其他语言类似,支持基本的条件判断。

Go 复制代码
if 条件 {
    // 执行代码
}
  • if-else 语句:

    Go 复制代码
    if 条件 {
        // 执行代码
    } else {
        // 执行代码
    }
  • if-else if-else 语句:

    Go 复制代码
    if 条件1 {
        // 执行代码
    } else if 条件2 {
        // 执行代码
    } else {
        // 执行代码
    }
  • if 语句中可以带有一个初始化语句,用于在判断条件前执行一次。

    Go 复制代码
    if 初始化语句; 条件 {
        // 执行代码
    }
switch 语句

switch 语句用于简化多个条件的判断,通常比多个 if-else 更简洁。

Go 复制代码
switch 表达式 {
case 值1:
    // 执行代码
case 值2:
    // 执行代码
default:
    // 执行代码
}
  • switch 语句可以没有表达式,相当于 switch true,适合多个条件分支。

    Go 复制代码
    switch {
    case 条件1:
        // 执行代码
    case 条件2:
        // 执行代码
    default:
        // 执行代码
    }

2. 循环语句

Go语言只有 for 一个循环关键字,但可以用于多种场景。

for 循环

基本的 for 循环形式:

Go 复制代码
for 初始化语句; 条件; 后续操作 {
    // 执行代码
}

例如:

Go 复制代码
for i := 0; i < 10; i++ {
    fmt.Println(i)
}
while 类似的循环

省略初始化和后续操作,可以实现类似 while 的效果。

Go 复制代码
i := 0
for i < 10 {
    fmt.Println(i)
    i++
}
无限循环

省略条件,实现无限循环。

Go 复制代码
for {
    // 执行代码
}
for range 循环

用于遍历数组、切片、映射、字符串和通道。

Go 复制代码
for 索引, 值 := range 集合 {
    // 执行代码
}

例如,遍历数组:

Go 复制代码
arr := []int{1, 2, 3, 4}
for i, v := range arr {
    fmt.Println(i, v)
}

3. 跳转控制语句

break

用于提前结束循环。

Go 复制代码
for i := 0; i < 10; i++ {
    if i == 5 {
        break
    }
    fmt.Println(i)
}
continue

用于跳过本次循环,继续下一次循环。

Go 复制代码
for i := 0; i < 10; i++ {
    if i%2 == 0 {
        continue
    }
    fmt.Println(i)
}
goto

goto 可以直接跳转到代码中的指定标签。标签以英文冒号 : 结尾。

Go 复制代码
i := 0
LOOP:
    fmt.Println(i)
    i++
    if i < 5 {
        goto LOOP
    }

4. 特殊控制语句

defer

defer 用于延迟执行函数,通常用于资源清理。被 defer 的语句会在函数返回之前执行,并且按后进先出的顺序执行。

Go 复制代码
func main() {
    defer fmt.Println("世界")
    fmt.Println("你好")
}

上面的代码会先输出"你好",再输出"世界"。

panic 和 recover
  • panic 用于引发异常,终止程序的正常执行。
  • recover 用于捕获 panic,避免程序崩溃。
Go 复制代码
func main() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("捕获到异常:", r)
        }
    }()
    
    panic("出现了严重错误")
}
相关推荐
有代理ip15 小时前
Python 与 Golang 爬虫的隐藏优势
爬虫·python·golang
天远云服16 小时前
天远车辆过户查询API微服务实战:用Go语言构建高性能车况溯源系统
大数据·微服务·架构·golang
女王大人万岁17 小时前
Go标准库 sync 详解
服务器·开发语言·后端·golang
小高Baby@17 小时前
session、cookie、Jwt-token
开发语言·后端·golang
Grassto18 小时前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
小二·19 小时前
Go 语言系统编程与云原生开发实战(第12篇)云原生部署实战:Helm Chart × GitOps × 多环境管理(生产级落地)
开发语言·云原生·golang
天空属于哈夫克319 小时前
Go 语言实战:构建一个企微外部群“技术贴收藏夹”小程序后端
小程序·golang·企业微信
小二·19 小时前
Go 语言系统编程与云原生开发实战(第13篇)工程效能实战:Monorepo × 依赖治理 × 构建加速(10万行代码实测)
开发语言·云原生·golang
暴躁小师兄数据学院19 小时前
【WEB3.0零基础转行笔记】Golang编程篇-第4讲:Go语言中的流程控制
开发语言·后端·golang·web3·区块链
lingggggaaaa1 天前
安全工具篇&Go魔改二开&Fscan扫描&FRP代理&特征消除&新增扩展&打乱HASH
学习·安全·web安全·网络安全·golang·哈希算法