go 的 for 循环语法严格区分三种形式:条件型(for expr)、传统三段式(for init; cond; post)和遍历型(for range),三者互斥,不可混合使用;试图在 range 后添加条件(如 for _, err := range errs; err != nil)会导致编译错误。
在 Go 中,for 循环的语法定义明确且简洁,根据 Go 语言规范,ForStmt 只允许以下三种形式之一:
- 条件循环:for expr { … }(类似 while)
- 传统 for 循环:for init; cond; post { … }
- range 遍历:for key, value := range collection { … }
⚠️ 重要规则:RangeClause 与 Condition / ForClause 不能共存。因此如下写法是非法的,编译会报错:
// ❌ 错误:语法不支持 range + 条件组合
for _, err := range errs; err != nil {
// ...
}
✅ 正确做法是将条件判断移入循环体内: