Skip to main content

循环 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