Go 语言 continue 语句(完整指南)

Go 语言 continue 语句详解:掌握循环中的“跳过机制”

在学习 Go 语言的过程中,控制流程是绕不开的核心概念之一。我们已经熟悉了 forifswitch 等基本结构,但当你深入到循环处理复杂数据时,会发现一个非常实用的小工具——continue 语句。它就像你在排队买奶茶时,发现前面有人插队,你决定跳过这个不合规的队伍,直接进入下一个窗口。在 Go 语言中,continue 就是这个“跳过当前循环迭代”的机制。

今天我们就来系统地聊聊 Go 语言 continue 语句,从基本语法到实战应用,带你彻底掌握它的使用场景和常见误区。


什么是 Go 语言 continue 语句?

continue 是 Go 语言中用于控制循环流程的关键字。当程序执行到 continue 时,会立即跳过当前循环体中剩余的代码,直接进入下一次循环的判断条件。

想象一下:你正在检查一串数字,目标是找出所有大于 10 的偶数。如果当前数字是奇数,你不需要做任何处理,直接跳过这个数字,进入下一个。这时,continue 就是你的“跳过按钮”。

语法结构

for 循环条件 {
    // 某些逻辑处理
    if 条件判断 {
        continue // 立即跳过本次循环剩余代码
    }
    // continue 之后的代码不会执行
    // 继续下一次循环
}

关键点在于:continue 只影响当前循环体,不会跳出整个循环结构。它不会终止循环,只是跳过本轮的后续逻辑。


continue 在 for 循环中的典型用法

在 Go 语言中,continue 最常见的应用场景就是 for 循环。我们通过几个例子来深入理解。

示例 1:跳过奇数,只处理偶数

package main

import "fmt"

func main() {
    // 遍历 1 到 10 的数字
    for i := 1; i <= 10; i++ {
        // 如果是奇数,直接跳过,不处理
        if i%2 == 1 {
            continue // 奇数不处理,直接进入下一轮
        }

        // 只有当 i 是偶数时,才会执行到这里
        fmt.Printf("当前偶数: %d\n", i)
    }
}

输出结果:

当前偶数: 2
当前偶数: 4
当前偶数: 6
当前偶数: 8
当前偶数: 10

注释说明:

  • i%2 == 1 判断是否为奇数;
  • continue 一旦触发,fmt.Printf 就不会执行;
  • 只有偶数才会输出,实现了“跳过奇数”的逻辑。

示例 2:过滤无效数据

在实际开发中,你经常要处理从文件或网络获取的数据。这些数据可能包含空值、错误格式或无效项。此时 continue 就非常有用。

package main

import "fmt"

func main() {
    // 模拟一组用户输入的年龄数据
    ages := []int{25, -3, 18, 0, 45, -10, 30, 15}

    for _, age := range ages {
        // 如果年龄小于等于 0,说明数据无效,跳过
        if age <= 0 {
            continue // 无效数据跳过,不进行后续处理
        }

        // 只处理有效年龄
        if age >= 18 {
            fmt.Printf("成年人: %d 岁\n", age)
        } else {
            fmt.Printf("未成年人: %d 岁\n", age)
        }
    }
}

输出结果:

成年人: 25 岁
成年人: 18 岁
成年人: 45 岁
成年人: 30 岁
未成年人: 15 岁

注释说明:

  • -30-10 都是无效年龄,被 continue 跳过;
  • 只有有效数据才进入后续判断逻辑;
  • 这种方式比嵌套 if 更清晰,也更安全。

continue 与 break 的区别:别混淆这两个“控制流兄弟”

很多初学者容易把 continuebreak 搞混。它们虽然都用于控制循环,但作用完全不同。

关键字 作用 是否跳出循环
break 立即终止整个循环,不再执行后续迭代
continue 跳过当前迭代,进入下一次循环

对比示例

package main

import "fmt"

func main() {
    fmt.Println("=== 使用 continue ===")
    for i := 1; i <= 5; i++ {
        if i == 3 {
            continue // 跳过 i == 3,但继续循环
        }
        fmt.Printf("continue 输出: %d\n", i)
    }

    fmt.Println("=== 使用 break ===")
    for i := 1; i <= 5; i++ {
        if i == 3 {
            break // 直接退出循环,不再执行 i == 4, 5
        }
        fmt.Printf("break 输出: %d\n", i)
    }
}

输出结果:

=== 使用 continue ===
continue 输出: 1
continue 输出: 2
continue 输出: 4
continue 输出: 5
=== 使用 break ===
break 输出: 1
break 输出: 2

关键区别:

  • continue 会让循环继续执行,只是跳过当前轮次;
  • break 会彻底中断循环,不再进入下一轮。

continue 在嵌套循环中的使用技巧

当有多个 for 循环嵌套时,continue 只会影响最近的一层循环。这一点容易出错,需要特别注意。

示例:二维数组中查找特定值

package main

import "fmt"

func main() {
    // 模拟一个 3x3 的矩阵
    matrix := [][]int{
        {1, 2, 3},
        {4, -1, 6},
        {7, 8, 9},
    }

    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[i]); j++ {
            // 如果当前元素是负数,跳过该位置的处理
            if matrix[i][j] < 0 {
                continue // 只跳过当前内层循环的本次迭代
            }

            // 只处理非负数
            fmt.Printf("位置 [%d][%d] 的值是: %d\n", i, j, matrix[i][j])
        }
    }
}

输出结果:

位置 [0][0] 的值是: 1
位置 [0][1] 的值是: 2
位置 [0][2] 的值是: 3
位置 [1][0] 的值是: 4
位置 [1][2] 的值是: 6
位置 [2][0] 的值是: 7
位置 [2][1] 的值是: 8
位置 [2][2] 的值是: 9

注意点:

  • -1continue 跳过,不会执行 fmt.Printf
  • 但外层循环(i)仍然会继续,不会中断;
  • continue 只影响当前的内层循环,不会跳出外层。

常见错误与最佳实践

错误 1:误认为 continue 会跳出整个循环

// ❌ 错误示例
for i := 1; i <= 5; i++ {
    if i == 3 {
        continue
    }
    fmt.Println(i)
}
// 输出: 1 2 4 5,不是 1 2

很多人以为 continue 会让 i 不再增加,但其实它只是跳过本轮代码,i++ 依然会执行。循环继续进行。

错误 2:在非循环结构中使用 continue

// ❌ 错误用法
if true {
    continue // 编译错误!continue 只能在 for 循环中使用
}

Go 语言严格限制 continue 只能出现在 for 循环中,其他结构(如 ifswitch)中使用会报错。

最佳实践建议

  • 使用 continue 前,先明确你是否真的需要跳过本轮;
  • 避免过度嵌套 continue,导致逻辑难以阅读;
  • 用清晰的条件表达式配合 continue,提升代码可读性;
  • 在处理数据过滤、异常跳过等场景中,优先考虑 continue

总结:Go 语言 continue 语句的核心价值

Go 语言 continue 语句 是控制循环流程的利器。它不是用来“跳过”逻辑,而是用来“跳过无效处理”。通过合理使用 continue,你可以让代码更简洁、逻辑更清晰。

在日常开发中,无论是数据过滤、异常处理,还是复杂嵌套循环的优化,continue 都能帮你避免冗余的嵌套 if,让程序更高效。

记住:continue 是“跳过当前这一轮”,而不是“退出循环”。理解这一点,你就能在写循环时更加游刃有余。

最后提醒:不要滥用 continue,它虽然好用,但过度使用会让代码变得难以追踪。保持逻辑清晰,才是编写高质量 Go 代码的关键。

当你下次遇到“有些数据不需要处理”的情况,不妨想想:是不是该用 continue 来优雅地跳过?