ZetCode

Golang break 关键字

最后修改于 2025 年 5 月 7 日

本教程将解释如何在 Go 语言中使用 break 关键字。我们将通过实际示例讲解如何跳出循环,涵盖循环控制基础知识。

break 语句终止最内层循环或 switch 语句的执行。当满足特定条件时,它用于提前退出循环。

在 Go 语言中,break 可用于 for 循环、switch 语句以及带有标签的更复杂的控制流。它通过避免不必要的迭代来帮助优化代码。

for 循环中的基本 break

break 最简单的用法是在满足条件时退出循环。此示例演示了如何跳出无限循环。

basic_break.go
package main

import "fmt"

func main() {
    i := 0
    
    for {
        fmt.Println(i)
        i++
        
        if i > 5 {
            break
        }
    }
    
    fmt.Println("Loop exited")
}

无限循环运行直到 i 超过 5。break 语句终止循环,然后执行继续到循环块之后。

跳出嵌套循环

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

nested_break.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++ {
            fmt.Printf("  Inner loop iteration %d\n", j)
            
            if j == 2 {
                break
            }
        }
    }
}

j 达到 2 时,内层循环中断,但外层循环正常继续。每次外层迭代都会重新启动内层循环。

switch 语句中的 break

在 switch 语句中,break 会退出 switch 块。此示例演示了它在 case 子句中的用法。

switch_break.go
package main

import "fmt"

func main() {
    num := 2
    
    switch num {
    case 1:
        fmt.Println("One")
        break
        fmt.Println("This won't print")
    case 2:
        fmt.Println("Two")
    case 3:
        fmt.Println("Three")
    }
    
    fmt.Println("Switch completed")
}

第一个 case 显示了显式的 break,而其他 case 依赖于隐式终止。break 之后的语句永远不会执行。

带标签的 break 语句

Go 支持带标签的 break 来退出外层循环。这个强大的功能有助于控制复杂的嵌套循环。

labeled_break.go
package main

import "fmt"

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

标签 OuterLoop: 标记外层循环。执行时,break OuterLoop 会立即跳出两个循环。

for-range 循环中的 break

break 在 range 循环中工作方式相似。此示例处理一个切片,直到满足某个条件。

range_break.go
package main

import "fmt"

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

循环遍历切片,直到找到“cherry”。break 停止对剩余元素的进一步处理。

实际示例:搜索循环

这个实际示例演示了如何在搜索算法中使用 break,以便在找到目标时提前退出。

search_break.go
package main

import "fmt"

func main() {
    numbers := []int{45, 23, 67, 89, 12, 56, 34}
    target := 12
    found := false
    
    for _, num := range numbers {
        if num == target {
            found = true
            break
        }
    }
    
    if found {
        fmt.Printf("Found target %d\n", target)
    } else {
        fmt.Printf("Target %d not found\n", target)
    }
}

当找到目标数字时,循环立即中断,避免了对剩余元素的不必要迭代。

break 与 continue 与 return 的区别

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

control_flow.go
package main

import "fmt"

func main() {
    fmt.Println("Break example:")
    for i := 0; i < 5; i++ {
        if i == 3 {
            break
        }
        fmt.Println(i)
    }
    
    fmt.Println("\nContinue example:")
    for i := 0; i < 5; i++ {
        if i == 3 {
            continue
        }
        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")
}

break 退出循环,continue 跳到下一次迭代,而 return 退出整个函数。它们各自有不同的用途。

来源

Go 语言规范

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

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 Golang 教程