18

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

 4 years ago
source link: https://studygolang.com/articles/28377
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Hi,大家好,我是明哥。

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

我的在线博客: http://golang.iswbm.com

我的 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 ++ 
}

输出如下

2. 接三个表达式

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

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

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

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

import "fmt"

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

输出如下

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用法

mYBFzuu.png!web

欢迎关注我们的微信公众号,每天学习Go知识

FveQFjN.jpg!web

Recommend

  • 64
    • 掘金 juejin.im 7 years ago
    • Cache

    cmake使用教程(七)-流程和循环

    【cmake系列使用教程】 cmake使用教程(一)-起步 cmake使用教程(二)-添加库 cmake使用教程(三)-安装、测试、系统自检 cmake使用教程(四)-文件生成器 cmake使用教程(五)-cpack生成安装包 cmake使用教程(六)-蛋疼的

  • 76

    1.1for循环的格式及基本使用1.1.1for循环语句格式:for(初始化语句;判断条件语句;控制条件语句){循环体语句;//让循环体代码执行多次;}1.1.2执行流程A:执行初始化语句B:执行判断条件语句,看其结果是true还是false如果是false,循环结束。如果是true,继续执行。C:...

  • 30

    控制跳转语句break1.1.1Break的使用场景和作用break的使用场景:在选择结构switch语句中在循环语句中离开使用场景的存在是没有意义的break的作用:跳出单层循环1.1.2代码案例十八packagecom.itheima_07;/**break:中断的意思*使用场景:*A:switch语句中*B:循环中*注...

  • 25
    • studygolang.com 5 years ago
    • Cache

    Go语言入门(二)-流程控制

    go流程控制 字符串详解 字符串原理 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换 字符串中的字符是不能修改的 字符串是有byte字节组成,所以字符串的长度是byte字...

  • 38
    • studygolang.com 4 years ago
    • Cache

    8. Go 语言流程控制:if-else

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 15
    • studygolang.com 4 years ago
    • Cache

    9. Go 语言流程控制:switch-case

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 27

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 27

    Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,...

  • 8
    • abcdxyzk.github.io 4 years ago
    • Cache

    HAProxy 研究笔记 -- 主循环处理流程

    HAProxy 研究笔记 -- 主循环处理流程 2015-07-29 16:05:00 http://blog.chinaunix.net/uid-10167808-id-3807412.html 本文简单...

  • 5

    TiDB Operator 源码阅读 (三) 编排组件控制循环TiDB Robot开源分布式数据库 TiDB

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK