模块 2 · 第 2 课(共 5)课程中的7/50~10 min
模块课程(2/5)
for:唯一的循环
Go 有一个单循环构造:for。没有 while,没有
do-while,没有 foreach(在下一课中出现)
range)。通过三种形式,单个关键字涵盖了所有情况。
for 的三种形式
经典的三分句形式
与 C/Java 相同:
Go
for i := 0; i < 5; i++ {
fmt.Println(i)
}i 的范围仅限于 for。这三个子句是可选的(您可以
省略其中任何一个),但如果省略中间一个,则 ; 仍然存在。
“while”形式:仅条件
在 Go 中, while 只是一个 for 和一个 bool 表达式:
Go
i := 0
for i < 5 {
fmt.Println(i)
i++
}无限形式
如果没有子句,循环永远不会终止(除非 break/return):
Go
for {
if exitCondition() {
break
}
doWork()
}它是事件处理循环、服务器、重试策略的模式。
break、continue 和标签
break 退出最内层循环, continue 跳到下一个迭代:
Go
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue // salta i pari
}
if i > 7 {
break // ferma il ciclo
}
fmt.Println(i) // 1 3 5 7
}要退出嵌套循环,有标签(罕见但有用):
Go
Esterno:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i*j == 4 {
break Esterno // esce da entrambi
}
}
}没有像 C 中那样的 , 运算符
在 Go 中你不能写 for i, j := 0, 10; i < j; i, j = i+1, j-1:
post 表达式不接受多重赋值。使用 Go 的
多重赋值语法:
Go
for i, j := 0, 10; i < j; i, j = i+1, j-1 {
fmt.Println(i, j)
}相反,这有效,因为 i, j = i+1, j-1 是一个单一的
多重分配。
尝试一下
锻炼#go.m2.l2.e1
尝试:0加载中...
使用经典的三分句 for 打印从 0 到 4(含)的数字。
正在加载编辑器...
显示提示
`对于初始化;条件; post { ... }` — 这里 init 是 `i := 0`。
3 次尝试后可用的解决方案
锻炼#go.m2.l2.e2
尝试:0加载中...
使用 for 的“while”形式将 1 到 10 之间的所有数字相加。
正在加载编辑器...
显示提示
“while”形式:“for <条件> { ... }”。
3 次尝试后可用的解决方案
Quiz#go.m2.l2.e3
准备好哪种形式代表 Go 中的无限循环?
Go
// (a) for i := 0; i < 10; i++ { ... }
// (b) for cond { ... }
// (c) for { ... }回顾
- 单个关键字
for具有三种形式:classic、while、infinite。 break/continue可选地带有嵌套循环的标签。- 在
for之前标记Name:,谨慎使用。 - 没有
,作为运算符:使用多重赋值i, j = ..., ...。