Golang For循环教程【带示例】

通过编写几个有用的示例,了解有关Golang循环的全部知识。

最近,Rust、Golang和TypeScript等编程语言在开发者中变得非常流行。如果你对后端开发和DevOps感兴趣,你应该考虑是一个绝佳选择!

如果你是一个初学者,正在学习编程语言的基本概念,那么循环结构是你应该了解的第一个概念之一。

Golang只提供了for循环结构。我们将学习有关for循环的知识,以及如何使用for循环模拟其他循环。

让我们开始吧!

Golang for循环的语法

在Golang中,您可以使用以下语法创建for循环:

for 初始化; 条件; 更新 {
    // 做一些事情
}

这里,

  • 初始化表示循环变量的初始化。
  • 条件是决定循环体执行的循环条件。只要循环条件计算结果为true,循环体中的语句就会被执行。当条件变为false时,控制流会退出循环。
  • 更新表示循环变量的更新,通常是增加或减少。

💡注意,这与C的for循环非常相似,只是没有括号。

下面是Golang for循环的控制流程:

是时候编写一些示例代码了!⏰您可以使用本地安装的Golang来编写代码,也可以在Go Playground上运行示例。

Golang for循环示例

让我们使用刚刚学到的语法编写我们的第一个for循环。以下是一个简单的for循环,以步长为1打印出从1到5的数字。

package main

import "fmt"

func main() {
	fmt.Println("For循环:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
}

我们将循环变量i初始化为1,将条件设置为i <= 5,并在每次迭代后将循环变量增加1。以下是输出:

//输出
For循环:
1
2
3
4
5

让我们再写一个for循环。此循环从5开始,倒数到1;它会一直执行,直到循环变量大于或等于1为止。因此,我们在每次迭代后将循环变量减1。

package main

import "fmt"

func main() {
	fmt.Println("For循环:")
	num := 5
	for i := num; i >= 1; i-- {
		fmt.Println(i)
	}
}

我们得到了预期的输出:

//输出
For循环:
5
4
3
2
1

循环变量的作用域是什么?

循环变量的作用域仅限于for循环块,并且不能在循环外访问。

为了验证这一点,让我们尝试在循环外部访问循环变量i的值:

package main

import "fmt"

func main() {
	fmt.Println("For循环:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
	fmt.Println(i)

}

正如预期的那样,我们遇到了一个错误,错误提示i未定义(且其作用域限制在for循环中):

// 输出
./prog.go:11:14: undefined: i

Golang中的无限循环

在Go中,我们可以有无限循环吗?是的,我们肯定可以!

如果您查看for循环的控制流程:

  • 只要条件计算结果为true,循环体将继续执行。
  • 当条件变为false时,控制流将退出循环。
  • 因此,如果条件永远不会变为false(或始终为true),我们将得到一个无限循环。

但是,即使没有初始化、条件和更新,也可以使用for循环,而不会遇到语法错误。因此,即使使用像这样的for循环构造,也可以使循环无限运行:

package main

import "fmt"

func main() {
	for {
	   fmt.Println("running...")
	}
}
//输出
running...
running...
running...
running...
running...
//并且一直运行下去!

在这个例子中,我们将变量num设置为5。循环条件是num >= 5。所以只要num大于或等于零,循环就会运行。

package main

import "fmt"

func main() {
	num := 5
	for num > 0 {
		fmt.Println(num)
	}
}

因为num的值永远不会改变,条件始终为true,循环将永远运行下去!

//输出
5
5
5
5
5
5
//并且一直运行下去!

所有Golang中只有for循环构造,我们可以尝试使用for循环来模拟while和do-while loops。所以让我们学习如何做到这一点!

使用For循环模拟While循环

while循环通常采用以下形式:

// 初始化循环变量
while (条件){
    // 做一些事情
    // 更新循环变量
} 

如果您还记得,我们写了第一个无限for循环:我们使用了以下for循环——没有初始化、条件和更新。

for {
// 最简单的无限循环
}

因此,我们可以修改for循环,只包含条件(以以下形式)来模拟while循环:

//初始化循环变量
for 条件 {
 // 做一些事情
 // 更新循环变量
}

这是我们编写的第一个for循环的while循环等效版本:

package main

import "fmt"

func main() {
	fmt.Println("模拟while循环")
	num := 5
	for num > 0 {
		fmt.Println(num)
		num--
	}
}
//输出
模拟while循环
5
4
3
2
1

使用For循环模拟Do-While循环

如果你在C语言中编写过代码,你知道do-while循环结构的形式如下:

// 初始化循环变量
do {
//做一些事情
// 更新循环变量
} while(条件);

while循环和do-while循环之间的关键区别在于,while循环在进入循环时检查条件,而do-while循环在退出循环时检查条件。

因此,在while循环中,如果条件求值为false,则循环体永远不会执行。然而,在do-while循环中,即使条件求值为false,循环体也会执行。

使用这些信息,我们可以模拟do-while循环的行为:

  • 编写一个无限的for循环
  • 使用具有正确条件的if条件语句来中断循环

假设您想编写一个do-while循环,其中循环体执行的条件是num < 0。因此,您可以编写一个for循环,并在num >= 0时中断循环。

package main

import "fmt"

func main() {
	fmt.Println("模拟do-while循环")
	num := 5
	for {
		fmt.Println("循环运行...")
		if num >= 0 {
			break
		}
	}
}

💡请注意,如果num < 0执行循环,并且如果num >= 0中断循环是等价条件。

尽管条件num > 0最初为false(num为5),但循环体运行一次,模拟了do-while循环。

//输出
模拟do-while循环
循环运行...

使用For循环遍历数组

在Golang中使用for循环和range循环遍历数组时,可以同时访问索引和元素。这与link_3的工作方式类似。

在这里,我们创建一个整数数组numArray,并使用for循环遍历它:

package main

import "fmt"

func main() {
	fmt.Println("遍历数组")
	numArray := []int{3, 7, 0, 10, 8, 9}
	for idx, num := range numArray {
		fmt.Println("索引", idx, ":", num)
	}
}

如上所示,我们能够同时访问每个索引的索引和元素:

//输出
遍历数组
索引 0 : 3
索引 1 : 7
索引 2 : 0
索引 3 : 10
索引 4 : 8
索引 5 : 9

在Golang中在循环中使用defer

在Golang中,您可以使用defer关键字来推迟函数调用。

虽然在资源清理和错误处理等应用程序中使用,但了解如何在for循环中使用defer可能会有所帮助。让我们看看在for循环中使用defer将调用推迟到Println()函数时会发生什么。

package main

import "fmt"

func main() {
	fmt.Println("For循环:")
	num := 5
	for i := 1; i <= num; i++ {
		defer fmt.Println(i)
	}
}

💬当延迟函数调用时,函数调用将被推送到堆栈上,并按LIFO顺序执行。此执行仅在包围延迟语句的函数返回后发生。

因此,fmt.Println(5)首先被执行,fmt.Println(1)最后被执行:

//输出
For循环:
5
4
3
2
1

结论

以下是您在本教程中学到的内容总结:

  • 在Golang中,您可以使用以下语法创建for循环:for initialization; condition; update { //loop body}
  • for循环的控制流非常简单。循环变量只初始化一次,循环条件确定是否执行循环体,更新是指在每次迭代后更新循环变量。
  • 循环变量的范围仅限于循环体,并且在循环外部不可访问。
  • 尽管Golang只提供了for循环结构,但可以使用for循环来模拟while和do-while循环的行为。
  • for循环的其他应用包括遍历数组和在for循环体内推迟函数调用。

接下来,学习如何使用for loops in Python。祝学习愉快!🎉

类似文章