Loops in Go

Posted by

Go 中的循环

Go 中的 for 语句用于将语句体重复指定次数,一次通过语句体称为迭代。应该注意的是,主体语句的重复可以基于计数器或 Go 中的条件。

在 Go 中,我们只有一个循环结构。 for 构造是 Go 中用于所有类型循环的唯一构造。与 C 或 Java 中的 for 循环相比,Go 中的基本 for 循环看起来几乎相同,唯一的区别是在 Go 中,for 循环中没有左括号和右括号。

还应该注意的是,Go 中没有 do-while 循环,它被排除在外,因为开发人员声称这种循环的用例并不多。

在 Go 中,有两种方法可以控制循环迭代:

  1. 计数器控制迭代
  2. 条件控制迭代

1. Counter-controlled iteration计数器控制迭代

在这种控制循环的方法中,我们使用一个设置的计数器迭代循环,该计数器可以以两种方式终止,或者我们上升到计数器,或者我们下降到它。

下面的代码显示了这种计数器控制迭代的最简单形式。

for initialization; condition; modification { }

示例:Go 中的 For 循环

下面显示了这种方法的一个非常简单的示例,其中我们迭代数组的项,然后在计数器控制的 for 循环的帮助下计算所有元素的总和

package main

import "fmt"

func main() {
	var arr = [5]int{1, 2, 3, 4, 5}
	var sum int
	for i := 0; i < len(arr); i++ {
		sum += arr[i]
	}
	fmt.Println("The Sum is:", sum)
}

输出结果:

The Sum is: 15

在上面的示例中,我们可以看到我们正在尝试迭代数组的所有元素,并且在每次迭代中,我们都试图将当前元素添加到 sum 变量中。 for 循环的主体 {} 重复已知次数,这由变量 i 计数。

循环以 i 的初始化为 i:=0(简写声明)开始。然后声明之后是对 i < len(arr) 的条件检查,该检查在每次迭代之前执行。当条件评估为真时,迭代完成。否则,当条件不为真时,for 循环停止。然后在条件之后,我们对i进行了修改,即i++,每次迭代后都会执行,此时再次检查条件,看循环是否可以继续。例如,这种修改也可以是减量,或 + 或 -,使用一个步骤。

示例 2:Go 中的 For 循环

考虑下面显示的示例。

package main

import (
	"fmt"
)

func main() {
	var arr = [6]int{1, 2, 3, 4, 5, 6}
	var sum int
	for i := 1; i < len(arr); i += 2 {
		sum += arr[i]
	}
	fmt.Println("The Sum is:", sum)
}

输出结果是:

The Sum is: 12

正如我们所看到的,在上面的 for 循环示例中,我们跳过了紧邻的下一个元素,只考虑放置在偶数索引处的元素。

示例:Go 中没有括号的 For 循环

还应该注意的是,如果我们尝试在 for 循环语句中使用括号,那么它会抛出一个错误。

考虑下面显示的示例:

package main

import (
	"fmt"
)

func main() {
	var arr = [6]int{1, 2, 3, 4, 5, 6}
	var sum int
	for (i := 1; i < len(arr); i += 2) {
		sum += arr[i]
	}
	fmt.Println("Sum is:", sum)
}

输出:./for_one.go:11:9: syntax error: unexpected :=, expecting )

示例:具有多个计数器的 For 循环

package main

import (
	"fmt"
)

func main() {
	var arr = [6]int{1, 2, 3, 4, 5, 6}
	var sum int
	var res [6]int
	for i, j := 0, 0; i < len(arr); i, j = i+1, j+1 {
		sum += arr[i]
		res[j] = sum
	}
	fmt.Println("The Sum is:", sum)
	fmt.Println("res arr:", res)
}

输出结果是:

The Sum is: 21
res arr: [1 3 6 10 15 21]

示例:Go 中的嵌套循环

For 循环也可以嵌套。嵌套循环是一个循环,其中又包含一个循环。考虑下面显示的示例:

package main

import (
	"fmt"
)

func main() {
	var arr = [3]int{1, 2, 3}
	for i := 0; i < len(arr); i++ {
		for j := 0; j < len(arr); j++ {
			fmt.Println("i and j are:", i, j)
		}
	}
}

在上面的例子中,对于 i 的每次迭代,j 将运行 3 次,因为数组的长度是 3。这意味着外部循环:for i:=0;i<len(arr);i++ 将运行 3次和内循环: j:=0;j<len(arr);j++ 将总共运行 9 次。

以上就是计数器控制循环的全部内容,是时候关注 Go 中另一种类型的循环了。

2. Condition-controlled iteration loop条件控制的迭代循环

这些类型的 for 循环比计数器控制的循环更容易,也更简单,因为只有一个约束来启动或中断循环,这就是条件。

for condition { }

让我们探索一个遵循上述语法的 for 循环示例。

package main

import (
	"fmt"
)

func main() {
	cond := true
	for cond {
		fmt.Println("Inside")
		cond = false
	}
	fmt.Println("Loop Done")
}

结果输出:

Inside
Loop Done

示例:Go 中的无限循环

在 Go 中,我们可以借助上述语法创建一个无限循环,我们可以完全省略条件,或者我们可以简单地告诉条件为真,然后不要在循环内更改它,这将使其充当一个无限循环。

考虑下面显示的示例:

package main

import (
	"fmt"
)

func main() {
	cond := true
	for cond {
		fmt.Println("Inside")
	}
	fmt.Println("Loop Done")
}

在本文中,我们了解了 Go 中存在的两种类型的 for 循环以及几个示例,我们还了解了要使用的关键字和要遵循的语法,以及不应该使用的内容。在上一个示例中,我们了解了无限循环,这是我们应该尽量避免的事情。