欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

10. Go 语言流程控制:for 循环

程序员文章站 2022-05-04 08:55:29
Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://g ......

hi,大家好,我是明哥。

在自己学习 golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《go编程时光》,对于 go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 go 语言,不防关注一下,一起学习,一起成长。

我的在线博客:
我的 github:github.com/iswbm/golangcodingtime


go里的流程控制方法还是挺丰富,整理了下有如下这么多种:

  • if - else 条件语句
  • switch - case 选择语句
  • for - range 循环语句
  • goto 无条件跳转语句
  • defer 延迟执行

上一篇讲了switch - case 选择语句,今天先来讲讲 for 循环语句。

0. 语句模型

这是 for 循环的基本模型。

for [condition |  ( init; condition; increment ) | range]
{
   statement(s);
}

可以看到 for 后面,可以接三种类型的表达式。

  1. 接一个条件表达式
  2. 接三个表达式
  3. 接一个 range 表达式

但其实还有第四种

  1. 不接表达式

1. 接一个条件表达式

这个例子会打印 1 到 5 的数值。

a := 1
for a <= 5 {
	fmt.println(a)
	a ++ 
}

输出如下

1
2
3
4
5

2. 接三个表达式

for 后面,紧接着三个表达式,使用 ; 分隔。

这三个表达式,各有各的用途

  • 第一个表达式:初始化控制变量,在整个循环生命周期内,只运行一次;
  • 第二个表达式:设置循环控制条件,当返回true,继续循环,返回false,结束循环;
  • 第三个表达式:每次循完开始(除第一次)时,给控制变量增量或减量。

这边的例子和上面的例子,是等价的。

import "fmt"

func main() {
    for i := 1; i <= 5; i++ {
        fmt.println(i)
    }
}

输出如下

1
2
3
4
5

2. 不接表达式:无限循环

在 go 语言中,没有 while 循环,如果要实现无限循环,也完全可以 for 来实现。

当你不加任何的判断条件时, 就相当于你每次的判断都为 true,程序就会一直处于运行状态,但是一般我们并不会让程序处于死循环,在满足一定的条件下,可以使用关键字 break 退出循环体,也可以使用 continue 直接跳到下一循环。

下面两种写法都是无限循环的写法。

for {
    代码块
}

// 等价于
for ;; {
    代码块
}

举个例子

import "fmt"

func main() {
	var i int = 1
	for {
		if i > 5 {
			break
		}
		fmt.printf("hello, %d\n", i)
		i++
	}
}

输出如下

hello, 1
hello, 2
hello, 3
hello, 4
hello, 5

3. 接 for-range 语句

遍历一个可迭代对象,是一个很常用的操作。在 go 可以使用 for-range 的方式来实现。

range 后可接数组、切片,字符串等

由于 range 会返回两个值:索引和数据,若你后面的代码用不到索引,需要使用 _ 表示 。

import "fmt"

func main() {
	myarr := [...]string{"world", "python", "go"}
	for _, item := range myarr {
		fmt.printf("hello, %s\n", item)
	}
}

输出如下

hello, world
hello, python
hello, go

系列导读

01. 开发环境的搭建(goland & vs code)

02. 学习五种变量创建的方法

03. 详解数据类型:****整形与浮点型

04. 详解数据类型:byte、rune与string

05. 详解数据类型:数组与切片

06. 详解数据类型:字典与布尔类型

07. 详解数据类型:指针

08. 面向对象编程:结构体与继承

09. 一篇文章理解 go 里的函数

10. go语言流程控制:if-else 条件语句

11. go语言流程控制:switch-case 选择语句

12. go语言流程控制:for 循环语句

13. go语言流程控制:goto 无条件跳转

14. go语言流程控制:defer 延迟调用

15. 面向对象编程:接口与多态

16. 关键字:make 和 new 的区别?

17. 一篇文章理解 go 里的语句块与作用域

18. 学习 go 协程:goroutine

19. 学习 go 协程:详解信道/通道

20. 几个信道死锁经典错误案例详解

21. 学习 go 协程:waitgroup

22. 学习 go 协程:互斥锁和读写锁

23. go 里的异常处理:panic 和 recover

24. 超详细解读 go modules 前世今生及入门使用

25. go 语言中关于包导入必学的 8 个知识点

26. 如何开源自己写的模块给别人用?

27. 说说 go 语言中的类型断言?

28. 这五点带你理解go语言的select用法


10. Go 语言流程控制:for 循环