go 语言中 for 循环不支持同时使用 range 子句与条件判断表达式
在 Go 中,for 循环的语法设计遵循“单一职责”原则:根据 官方语言规范,for 语句仅允许以下三种形式之一:
- 条件循环:for expr { … }(如 for i
- 传统三段式循环:for init; cond; post { … }(如 for i := 0; i
- 范围遍历:for key, value := range collection { … }
⚠️ 关键限制:这三者不可组合。你不能写成 for _, err := range errs; err != nil { … }——这种写法语法错误,Go 编译器会报 syntax error: unexpected semicolon or newline before {。
✅ 正确做法是将条件判断移入循环体内:
for _, err := range errs {
if err != nil {
log.Printf("encountered error: %v", err)
// 处理错误逻辑,如 break、continue 或返回
}
}
若需提前终止遍历(例如只处理第一个非 nil 错误),可配合 break 使用: