continue 不修改循环变量,是否递增取决于 for 语句结构;在嵌套循环中仅作用于最内层;边遍历边修改原切片易出错,推荐用新切片收集保留项。

continue 在 Go 里不是“跳过某段代码”,而是“跳过本轮循环剩余部分,立刻进入下一轮条件判断”——这个动作本身不修改循环变量,也不重置状态,所以用错位置极易导致死循环或逻辑跳变。
for 循环中 continue 后循环变量是否自动递增?
取决于 for 语句的写法:
- 标准
for i := 0; i 形式:执行 <code>continue后,i++仍会执行,再检查i - 省略更新语句的
for i := 0; i :<code>continue后不会执行任何更新,i 值不变 → 若没手动推进,必然死循环 - while 风格
for n > 0 { ... if cond { continue } ... n-- }:必须确保continue前或后有状态变更,否则 n 永远不减
嵌套循环中 continue 默认作用于哪一层?
只影响它所在的最内层循环,这是绝大多数人踩坑的起点:
- 内层
for j := 0; j → 跳过 <code>j == 1这次,不影响外层i - 若想让外层也跳过当前
i,必须加标签:outer: for i := 0; i - 标签名不能重复,且
continue label中的label必须紧贴在目标循环前(中间不能有空行或声明)
在切片遍历中用 continue 删除元素时为什么容易漏掉下一个?
因为 continue 不改变索引,但 append 或切片操作已使底层数组偏移:
立即学习“go语言免费学习笔记(深入)”;
- 错误写法:
for i := range nums { if nums[i] == 3 { nums = append(nums[:i], nums[i+1:]...); continue }→ 下轮i自增,原i+1位置元素被跳过 - 安全做法:要么用
for i := 0; i 手动控制索引并只在不删除时 <code>i++,要么改用反向遍历for i := len(nums)-1; i >= 0; i-- - 更推荐方案:用新切片收集保留项,避免边遍历边修改原结构
最容易被忽略的是:continue 的行为完全绑定在 for 语句结构上,而不是“跳过后面几行代码”这种直觉理解。它不关心你写了什么,只认语法位置和循环上下文。


















