ZetCode

Golang continue 关键字

最后修改于 2025 年 5 月 7 日

本教程解释了如何在 Go 中使用 continue 关键字。我们将通过实际示例跳过迭代来涵盖循环控制基础知识。

continue 语句会跳过最内层循环的当前迭代。当满足特定条件时,它用于绕过特定的迭代。

在 Go 中,continue 可用于 for 循环和带标签的循环,以实现更复杂的控制流。它通过避免不必要的代码来帮助优化循环。

for 循环中的基本 continue

continue 最简单的用法是在满足条件时跳过迭代。此示例演示了跳过奇数。

basic_continue.go
package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        if i%2 != 0 {
            continue
        }
        fmt.Println(i)
    }
}

该循环仅打印偶数。当 i 是奇数时,continue 会跳过 print 语句,然后进入下一次迭代。

嵌套循环中的 Continue

continue 仅影响最内层的循环。此示例展示了它在嵌套循环结构中的工作方式。

nested_continue.go
package main

import "fmt"

func main() {
    for i := 0; i < 3; i++ {
        fmt.Printf("Outer loop iteration %d\n", i)
        
        for j := 0; j < 5; j++ {
            if j == 2 {
                continue
            }
            fmt.Printf("  Inner loop iteration %d\n", j)
        }
    }
}

j 等于 2 时,内层循环会跳过迭代,但外层循环会正常继续。continue 只影响其所在的循环。

带标签的 Continue 语句

Go 支持带标签的 continue 来控制外层循环。此强大功能有助于管理复杂的嵌套循环。

labeled_continue.go
package main

import "fmt"

func main() {
OuterLoop:
    for i := 0; i < 5; i++ {
        for j := 0; j < 5; j++ {
            if i == 2 && j == 2 {
                continue OuterLoop
            }
            fmt.Printf("i=%d, j=%d\n", i, j)
        }
    }
}

标签 OuterLoop: 标记外层循环。执行时,continue OuterLoop 会跳过当前外层循环的迭代。

range 循环中的 Continue

continue 在 range 循环中的工作方式类似。此示例在跳过特定元素的同时处理切片。

range_continue.go
package main

import "fmt"

func main() {
    fruits := []string{"apple", "banana", "cherry", "date", "elderberry"}
    
    for index, fruit := range fruits {
        if len(fruit) < 5 {
            continue
        }
        fmt.Printf("%d: %s\n", index, fruit)
    }
}

该循环跳过名称长度小于 5 个字符的水果。continue 会绕过这些元素的 print 语句。

实际示例:数据过滤

此实际示例演示了如何使用 continue 来过滤掉无效数据点进行处理。

filter_continue.go
package main

import "fmt"

func main() {
    temperatures := []float64{22.5, -999, 18.3, -999, 25.7, 19.2}
    validCount := 0
    
    for _, temp := range temperatures {
        if temp == -999 {
            continue
        }
        fmt.Printf("Processing temperature: %.1f\n", temp)
        validCount++
    }
    
    fmt.Printf("Processed %d valid temperatures\n", validCount)
}

该循环跳过无效的温度读数(-999)。continue 语句有助于有效地仅处理有效数据点。

具有复杂条件的 Continue

此示例展示了带有更复杂逻辑条件的 continue,以展示其灵活性。

complex_continue.go
package main

import "fmt"

func main() {
    for i := 1; i <= 20; i++ {
        if i%3 == 0 || i%5 == 0 {
            continue
        }
        fmt.Printf("%d ", i)
    }
    fmt.Println()
}

该循环跳过可被 3 或 5 整除的数字。continue 语句可与任何布尔条件结合使用来控制循环流。

Continue vs break vs return

此示例将 continue 与其他控制流语句进行了对比,以阐明它们的区别。

control_flow.go
package main

import "fmt"

func main() {
    fmt.Println("Continue example:")
    for i := 0; i < 5; i++ {
        if i == 3 {
            continue
        }
        fmt.Println(i)
    }
    
    fmt.Println("\nBreak example:")
    for i := 0; i < 5; i++ {
        if i == 3 {
            break
        }
        fmt.Println(i)
    }
    
    fmt.Println("\nReturn example:")
    for i := 0; i < 5; i++ {
        if i == 3 {
            return
        }
        fmt.Println(i)
    }
    
    fmt.Println("This won't print due to return")
}

continue 跳至下一次迭代,break 退出循环,return 退出整个函数。它们各自服务于不同的目的。

来源

Go 语言规范

本教程通过各种场景下的循环控制实际示例,涵盖了 Go 中的 continue 关键字。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。至今,我已创作了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程