循环 Loops
Definition
The basic loop in Go is written in standard C-like syntax:
for INITIAL; CONDITION; AFTER {
// do something
}
for i := 0; i < 10; i++ {
fmt.Println(i)
}
// Prints 0 through 9
Omitting sections from a for loop in Go
1. 只有条件(CONDITION)
这类似于其他语言中的 while
循环。
i := 0
for i < 5 {
fmt.Println(i)
i++
}
在这个例子中,只有一个条件 i < 5,没有初始化和后处理步骤。
2. 只有初始化(INITIAL)和后处理(AFTER)
这种形式的循环可以用于创建无限循环,其中初始化和后处理在每次迭代中执行,但没有显式的结束条件。
for i := 0; ; i++ {
fmt.Println(i)
}
这个循环将无限打印数字,因为没有提供结束条件。
Loops in Go can omit sections of a for loop, 在 for loop 内加入结束条件:
for INITIAL; ; AFTER {
// do something forever
}
// Get the maxMessages based totalCost
func maxMessages(thresh float64) int {
totalCost := 0.0
for i:=0; ; i++ {
totalCost += 1.0 + (0.01 * float64(i))
if totalCost > thresh {
return i
}
}
}
3.只有初始化(INITIAL)和条件(CONDITION)
这类似于传统的 for
循环,但没有后处理步骤。
for i := 0; i < 5; {
fmt.Println(i)
i++
}
这个循环初始化 i
,然后在每次迭代结束时手动增加 i
。
4. 只有后处理(AFTER)
这种形式的循环非常罕见,因为它通常需要在循环体外部初始化变量。
i := 0
for ; ; i++ {
if i >= 5 {
break
}
fmt.Println(i)
}
这个循环在循环体内部检查条件,并在满足条件时使用 break
跳出循环。
5. 无初始化(INITIAL)、无条件(CONDITION)、无后处理(AFTER)
这将创建一个无限循环。
for {
fmt.Println("Infinite loop")
}
这个循环将永远运行,直到遇到 break
语句或程序被外部方式中断。
keywords
continue
keyword
The continue
keyword stops the current iteration of a loop and continues to the next iteration. continue
is a powerful way to use the "guard clause" pattern within loops.
for i := 0; i< 10; i++ {
if i % 2 == 0 {
continue
}
fmt.Println(i)
}
// 1
// 3
// 5
// 7
// 9
break
keyword
The break
keyword stops the current iteration of a loop and exits the loop.
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
// 0
// 1
// 2
// 3
// 4