Go 语言循环语句(Loop Statements)详解
                           
天天向上
发布: 2025-03-25 23:45:51

原创
745 人浏览过

在 Go 语言中,循环语句用于执行重复操作。Go 语言提供了 for 关键字实现循环结构,并且支持以下三种循环类型:

  1. 标准 for 循环(类 C 语言的 for 语法)
  2. for 作为 while 循环
  3. 无限循环
  4. for range 循环(用于遍历数组、切片、映射、字符串、通道)

1. for 循环(标准格式)

1.1 语法

for 初始化语句; 条件表达式; 递增/递减语句 {
    // 代码块
}
  • 初始化语句:只执行一次,通常用于变量初始化。
  • 条件表达式:每次循环开始前进行条件判断,true 继续执行,false 终止循环。
  • 递增/递减语句:每次循环结束后执行,用于控制循环变量的变化。

1.2 示例

package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        fmt.Println("当前值:", i)
    }
}

输出:

当前值: 1
当前值: 2
当前值: 3
当前值: 4
当前值: 5

2. for 作为 while 循环

Go 语言没有 while 关键字,但可以使用 for 实现 while 循环的效果。

2.1 语法

for 条件表达式 {
    // 代码块
}
  • 省略了初始化递增/递减部分,循环仅受条件控制。

2.2 示例

package main

import "fmt"

func main() {
    count := 0

    for count < 5 {
        fmt.Println("计数:", count)
        count++
    }
}

输出:

计数: 0
计数: 1
计数: 2
计数: 3
计数: 4

3. 无限循环

for 循环如果没有指定条件表达式,就会变成无限循环

3.1 语法

for {
    // 代码块
}
  • 这种循环不会自动停止,只能通过 break 语句终止。

3.2 示例

package main

import "fmt"

func main() {
    count := 0

    for {
        fmt.Println("循环执行:", count)
        count++

        if count >= 3 {
            break // 终止循环
        }
    }
}

输出:

循环执行: 0
循环执行: 1
循环执行: 2

4. for range 循环(遍历集合)

for range 语句用于遍历数组、切片、映射(map)、字符串、通道(channel)

4.1 遍历数组和切片

package main

import "fmt"

func main() {
    nums := []int{10, 20, 30, 40}

    for index, value := range nums {
        fmt.Printf("索引: %d, 值: %d\n", index, value)
    }
}

输出:

索引: 0, 值: 10
索引: 1, 值: 20
索引: 2, 值: 30
索引: 3, 值: 40
  • index:索引
  • value:对应索引的值

如果不需要索引,可以用 _ 代替:

for _, value := range nums {
    fmt.Println(value)
}

4.2 遍历字符串

遍历字符串时,for range 返回的是索引Unicode 码点(rune 类型)

package main

import "fmt"

func main() {
    str := "Go语言"

    for index, char := range str {
        fmt.Printf("索引: %d, 字符: %c\n", index, char)
    }
}

输出:

索引: 0, 字符: G
索引: 1, 字符: o
索引: 2, 字符: 语
索引: 5, 字符: 言

注意

  • 中文字符占多个字节,因此某些索引值不是连续的。

4.3 遍历 map(键值对)

package main

import "fmt"

func main() {
    scores := map[string]int{"Alice": 90, "Bob": 85, "Charlie": 95}

    for name, score := range scores {
        fmt.Printf("姓名: %s, 分数: %d\n", name, score)
    }
}

输出:

姓名: Alice, 分数: 90
姓名: Bob, 分数: 85
姓名: Charlie, 分数: 95

如果只想遍历 map 的键:

for key := range scores {
    fmt.Println("键:", key)
}

4.4 遍历 channel

package main

import "fmt"

func main() {
    ch := make(chan int, 3)
    ch <- 10
    ch <- 20
    ch <- 30
    close(ch) // 关闭通道

    for num := range ch {
        fmt.Println("接收:", num)
    }
}

输出:

接收: 10
接收: 20
接收: 30
  • range 用于遍历 channel 时,通道必须关闭,否则会死锁

5. break 语句(终止循环)

break 用于提前终止循环,跳出当前循环体。

示例

package main

import "fmt"

func main() {
    for i := 1; i <= 10; i++ {
        if i > 5 {
            break
        }
        fmt.Println("值:", i)
    }
}

输出:

值: 1
值: 2
值: 3
值: 4
值: 5

6. continue 语句(跳过本次循环)

continue 用于跳过本次循环的剩余部分,直接进入下一次循环。

示例

package main

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        if i == 3 {
            continue
        }
        fmt.Println("值:", i)
    }
}

输出:

值: 1
值: 2
值: 4
值: 5

注意: continue 跳过 i == 3 的执行。


7. 总结

语句作用
for标准循环
for (作为 while)只有条件表达式的循环
for {}无限循环
for range遍历集合(数组、切片、map、字符串、channel)
break终止当前循环
continue跳过本次循环,进入下一次

发表回复 0

Your email address will not be published. Required fields are marked *