全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-14 5 分钟 ✍️ juanwangdev

Go跳转语句break和continue

Go break和continue控制循环执行流程,配合标签可跳出多层循环。

break语句

退出循环

Go
for i := 0; i < 10; i++ {
    if i == 5 {
        break  // 退出循环
    }
    fmt.Println(i)
}
// 输出:0, 1, 2, 3, 4

退出switch

Go
// switch中break可选(默认有)
switch n {
case 1:
    fmt.Println("1")
    break  // 可省略,自动break
case 2:
    fmt.Println("2")
}

continue语句

跳过当前迭代

Go
for i := 0; i < 10; i++ {
    if i % 2 == 0 {
        continue  // 跳过偶数
    }
    fmt.Println(i)
}
// 输出:1, 3, 5, 7, 9

继续下一次迭代

Go
nums := []int{1, 2, 3, -1, 4, 5}

for _, n := range nums {
    if n < 0 {
        continue  // 跳过负数
    }
    process(n)  // 只处理正数
}

标签配合break

跳出外层循环

Go
outer:
for i := 0; i < 5; i++ {
    for j := 0; j < 5; j++ {
        if i == 2 && j == 2 {
            break outer  // 跳出外层循环
        }
        fmt.Println(i, j)
    }
}
// 当i=2, j=2时,直接跳出所有循环

查找示例

Go
found := false
search:
for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
        if data[i][j] == target {
            found = true
            break search  // 找到后退出所有循环
        }
    }
}

标签配合continue

跳到外层循环下一次

Go
outer:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if j == 1 {
            continue outer  // 跳到i的下一个值
        }
        fmt.Println(i, j)
    }
}
// 输出:(0,0) (1,0) (2,0)
// j=1时跳到外层i的下一次

break vs continue对比

语句作用执行后
break退出循环循环结束
continue跳过本次继续下一次
break label退出多层跳出标签循环
continue label跳到外层外层下一次

标签规则

定义标签

Go
labelName:
for ... {
    // 循环体
}

// 标签必须在循环或switch前
// 标签名可以是任意标识符

使用标签

Go
myLoop:
for i := 0; i < 10; i++ {
    if condition {
        break myLoop    // 退出标签指定的循环
        continue myLoop // 跳到标签循环下一次
    }
}

goto语句

goto跳转(不推荐)

Go
// goto跳转到标签(不推荐使用)
i := 0
loop:
fmt.Println(i)
i++
if i < 5 {
    goto loop  // 跳到loop标签
}

goto易导致代码混乱,尽量避免使用。

goto vs break/continue

Go
// break/continue:结构化跳转,推荐
for i := 0; i < 10; i++ {
    if i == 5 {
        break  // 清晰退出
    }
}

// goto:任意跳转,不推荐
i := 0
loop:
if i < 10 {
    i++
    goto loop  // 跳转混乱
}

使用示例

Go
func findTarget(matrix [][]int, target int) bool {
    found := false
search:
    for i := 0; i < len(matrix); i++ {
        for j := 0; j < len(matrix[i]); j++ {
            if matrix[i][j] == target {
                found = true
                break search  // 找到即退出
            }
        }
    }
    return found
}

func filter(nums []int) []int {
    result := []int{}
    for _, n := range nums {
        if n < 0 {
            continue  // 跳过负数
        }
        result = append(result, n)
    }
    return result
}

要点总结

  • break退出整个循环
  • continue跳过当前迭代,继续下一次
  • 标签配合break跳出多层循环
  • 标签配合continue跳到外层下一次
  • 标签定义在循环前:labelName:
  • switch中break可选(默认自动break)
  • goto不推荐使用,易造成代码混乱
  • break/continue是结构化跳转,推荐使用

📝 发现内容有误?点击此处直接编辑

← 上一篇 Go条件语句if-else
下一篇 → Go函数作为值与高阶函数
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库