一架梯子,一头程序猿,仰望星空!
Golang程序设计教程(2024版) > 内容正文

掌握Go语言循环:详解Golang `for` 循环语句


1 循环语句概述

在 Go 语言中,循环语句允许我们多次执行一个代码块。当你需要重复执行某些操作时,循环语句就变得非常有用。例如,你可能想要遍历数组中的每个元素,或者重复执行某项操作直到满足特定条件为止。在 Go 中,循环语句主要通过 for 关键字实现,它是 Go 语言中唯一的循环语句。正确使用循环语句对于编写高效且易于维护的代码至关重要。

2 for 循环基础

2.1 for 循环的构成

Go 语言的 for 循环有三个组成部分:

  1. 初始化语句:在第一次迭代前执行,通常用于声明循环计数器。
  2. 条件表达式:在每次迭代前求值。如果条件为 true,则继续执行循环体。
  3. 后续操作:在每次迭代的代码块执行完毕后执行,通常用于更新循环计数器。

for 循环的语法如下所示:

for 初始化语句; 条件表达式; 后续操作 {
    // 循环体代码
}

2.2 简单 for 循环实例

让我们通过一个简单的例子理解 for 循环的执行过程:

package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println("i的值是:", i)
    }
}

在这个例子中,变量 i 被初始化为 0for 循环检查 i < 5 条件是否为真。如果条件为真,执行循环体并打印 i 的值。执行完循环体后,i 的值通过 i++(递增操作)更新,然后循环重新检查条件,直到 i 的值到达 5 时,条件变为假,并且 for 循环终止。

2.3. 其他for循环实例

Go语言的for循环非常灵活,可以有多种不同形式的写法来应对不同的场景。

2.3.1 无条件循环

在Go中,你可以省略for循环的初始化语句、条件表达式以及后续操作,这会创建一个无限循环,它将一直运行直到被break语句终止或者是返回函数值。

for {
    // 无限循环中的代码
    if someCondition {
        break // 当满足某个条件时退出循环
    }
}

2.3.2 只有条件的循环

在Go里,你也可以使用只包含条件的for循环,类似于其他编程语言中的while循环。

n := 0
for n < 5 {
    fmt.Println(n)
    n++
}

上面的代码会打印``到4,在n达到5时循环结束。

2.3.3 循环遍历数组或切片

Go语言使用范围(range)关键字来更简单地遍历数组或切片中的每个元素。

items := []int{1, 2, 3, 4, 5}
for index, value := range items {
    fmt.Printf("索引:%d, 值:%d\n", index, value)
}

上面的代码会打印每个元素的索引和值。如果你只需要元素的值,可以通过使用_来忽略索引。

for _, value := range items {
    fmt.Printf("值:%d\n", value)
}

说明:在后续章节会详细讲解数组的用法,这里看不明白不要紧,只要了解for循环可以这么使用即可。

2.3.4 循环遍历映射(maps)

遍历映射时,for循环与range表达式一起使用就显得非常有力。这允许你获取映射的每个键值对。

colors := map[string]string{"red": "#ff000", "green": "#00ff00", "blue": "#000ff"}
for key, value := range colors {
    fmt.Printf("键:%s, 值:%s\n", key, value)
}

在这个例子中,我们打印出了映射colors中所有的键和对应的值。如同在遍历切片时一样,如果只需要键或值,您可以选择忽略另一个值。

说明:在后续章节会详细讲解maps的用法,这里看不明白不要紧,只要了解for循环可以这么使用即可。

3 控制循环流程

3.1 使用 break 结束循环

有时候我们需要在满足特定条件时提前退出循环,这时可以使用 break 语句。下面是一个使用 break 退出循环的例子:

package main

import "fmt"

func main() {
    for i := ; i < 10; i++ {
        if i == 5 {
            break // 当 i 等于 5 时退出循环
        }
        fmt.Println("i的值是:", i)
    }
    // 输出将只包含从  到 4 的值
}

3.2 使用 continue 跳过迭代

在某些情况下,我们可能只想跳过当前的迭代,并继续执行循环中的下一次迭代。这可以通过 continue 语句实现。这里有一个例子:

package main

import "fmt"

func main() {
    for i := ; i < 10; i++ {
        if i%2 != 0 {
            continue // 如果 i 是奇数,跳过此次迭代
        }
        fmt.Println("偶数:", i)
    }
}