哈喽大家好,我是陈明勇,今天分享的知识是 Go 的循环结构。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

耐心和持久胜过激烈和狂热。

循环结构

循循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。有的编程语言,包含两种循环结构,一种是 for 循环,另一种是 while 循环,而在 Go 里面,有且只有一种循环 —— for 循环。接下来看一个示例:

func main() {sum := 0for num := 1; num <= 10; num++ {sum += num}println(sum) // 55
}

上述代码实现的功能是在 1-10 之中累加求和,最后的结果为 55

  • 上图所示,for 循环分为四个部分,第一部分 num := 1 为循环前置语句,在这一部分,我们一般都会定义一些变量,这些变量被使用于第二部分第三部分里。
  • 第二部分是条件判断表达式,也就是布尔表达式,多条件可以使用逻辑操作符进行连接。此部分的作用是判定循环是否继续下去,图中循环不终止的条件为 num <= 10。只要条件成立,就会去执行第三部分.
  • 第三部分为循环体,只要循环不终止,程序就会重复执行循环体里面的代码。上述例子中,循环体所做的事情就是累加 num 变量的值。
  • 第四部分为循环后置语句,这一部分通常会对第一部分所定义的变量进行更新,例如上述例子中,对 num 进行自增。

for 循环执行顺序是这样的:

  • 第一部分(只会执行一次)
  • 第二部分(若布尔表达式的值为 false 则终止循环,不进行第三第四部分)
  • 第三部分
  • 第四部分,然后返回第二部分继续执行。
    对于上述四个部分,除了第三部分以外,其他部分都可以省略。如果只留第三部分,那么就形成死循环,以下为示例:

    func main() {for {println("糟糕,死循环!")}
    }
    

    在一些场景下,我们会利用死循环去做一些特定的事,但是最终还是要跳出死循环的。如何跳出死循环,就涉及到接下来要讲的关键字 break

for-range

除了上面所讲的普通 for 循环的形式,Go 里面还支持一种 for 循环,为 for-range 循环,这是一种什么循环形式呢?我们来看看例子:

import "fmt"func main() {nums := [4]int{1, 2, 3, 4}for i := 0; i < len(nums); i++ {fmt.Printf("下标:%d,元素:%d\n", i, nums[i])}
}

上述代码,在循环前置语句中,声明数组的下标,然后循环体通过下标值打印数组的元素,我们来看看使用 for-range 的代码实现是怎么样的:

import "fmt"func main() {nums := [4]int{1, 2, 3, 4}for i, num := range nums {fmt.Printf("下标:%d,元素:%d\n", i, num)}
}

与普通 for 循环相比,for-range 的形式代码量少了很多,除了循环体保留了下来,其余部分都融入到了 for-range 的语义里。上述代码中,变量 i 为数组的下标索引,num 为数组中的元素值。如果我们所关注的只是数组的下标索引或者元素值,可以进行以下改造:

  • 只关注下标索引

    import "fmt"func main() {nums := [4]int{1, 2, 3, 4}for i := range nums {fmt.Printf("下标:%d\n", i)}
    }

    仅仅定义一个 i 变量。

  • 只关注元素值
    import "fmt"func main() {nums := [4]int{1, 2, 3, 4}for _, num := range nums {fmt.Printf("元素值:%d\n", num)}
    }

    索引位置使用 _ 代替,表示忽略下标索引的接收。

  • 下标索引和元素值都不关注
    package mainfunc main() {nums := [4]int{1, 2, 3, 4}for range nums {}
    }

break 和 continue 关键字

break 和 continue 关键字用于控制 for 循环的代码流程,且只对最近的 for 循环有效(多层循环的情况下)。

  • break
    退出 for 循环,循环体后续代码不再执行。
  • continue
    终止本轮循环,循环体后续代码不再执行,进入下一轮循环。

示例

  • 循环遍历数组,如果在数组内找到元素值 6,则退出循环。

    func main() {nums := [5]int{1, 2, 6, 3, 4}for _, num := range nums {if num == 6 {break}println("元素:", num)}
    }

    执行结果:

    元素: 1
    元素: 2
    

    根据执行结果可知,遍历数组到元素 6 的时候,使用 break 关键字,循环就终止了,后面的元素 34 没有被打印出来。前面所提到的死循环也可以使用 break 关键字跳出循环。

  • 循环遍历数组,只打印奇数,忽略偶数。
    func main() {nums := [5]int{1, 2, 6, 3, 4}for _, num := range nums {if num%2 == 0 {continue}println("元素:", num)}
    }
    

    执行结果:

    元素: 1
    元素: 3
    

    遇到偶数元素,就使用关键字 continue 结束本轮循环,开始下一轮循环。

label

Go 语言中,label 语句的作用是标记跳转的目标。示例说明:
遍历二维数组,找到元素 3 后结束跳出整个循环。

func main() {nums := [][]int{{1, 2},{3, 4},{5, 6},}for i := 0; i < len(nums); i++ {println("第", i+1, "轮:")for j := 0; j < len(nums[i]); j++ {if nums[i][j] == 3 {break}println("元素值:", nums[i][j])}}
}

执行结果:

第 1 轮:
元素值: 1
元素值: 2
第 2 轮:
第 3 轮:
元素值: 5
元素值: 6

外层循环一共要循环三轮,根据结果可知,使用 break 关键字,并没有跳出整个循环。在第二轮循环之后,进入内层循环,找到元素 4break 关键字只终止了内层循环,外层循环的第三轮还会继续执行,这并不是我们想要的结果。要想达到目标结果,需要结合 label 语句实现:

func main() {nums := [][]int{{1, 2},{3, 4},{5, 6},}
outerLoop:for i := 0; i < len(nums); i++ {println("第", i+1, "轮:")for j := 0; j < len(nums[i]); j++ {if nums[i][j] == 3 {break outerLoop}println("元素值:", nums[i][j])}}
}

执行结果:

第 1 轮:
元素值: 1
元素值: 2
第 2 轮:

在第一层循环前面,使用 label 语句,用 outerLoop 进行标记,然后在 break 关键字后面加上这个标记,就能实现跳出整个循环。

小结

本文首先介绍了 Go 里面的普通 for 循环,然后由普通 for 循环引出了 for-range 循环,对于数组、切片、Map 等复合数据结构,遍历方式使用 for-range 的形式会更好,特殊的复合数据类型如 Map,遍历方式也只能用 for-range 的形式。本文还提到了 breakcontinuelabel 关键字,通过案例介绍了它们的使用场景。

一文熟悉 Go 的循环结构 —— for 循环相关推荐

  1. GO学习笔记 - Go 只有一种循环结构—— for 循环。

    一,Go 只有一种循环结构-- for 循环. 官方教程:https://tour.go-zh.org/flowcontrol/1 Go 只有一种循环结构-- for 循环. 基本的 for 循环包含 ...

  2. Julia循环结构_for循环_2020-04-23

    # Julia循环结构_for循环_2020-04-23Thursday #@ for循环是一种迭代循环机制,迭代即重复相同的逻辑操作,每次操作都是基于上一次的结果进行的,而while循环是条件循环. ...

  3. 循环结构以及循环关键字

    循环结构 1. 循环结构特点 任何循环都要求有四个必不可少的条件 1.计数器初始化 2.循环条件 3.循环体 4.计数器变化 2. while循环 while单词:当-- while ( 循环条件 ) ...

  4. 【MATLAB】流程控制 ( 循环结构 | for 循环 | while 循环 | 分支结构 | if end 分支结构 | if else end 分支结构 | switch case 分支结构 )

    文章目录 一.MATLAB 流程控制结构 二.for 循环 1.for 循环 2.嵌套 for 循环 三.while 循环 二.分支结构 1.if end 分支结构 2.if else end 分支结 ...

  5. python for循环结构_循环结构-for循环

    我们在上一节提到过计数控制的循环是根据绝对值的次数来进行循环,我们通过for语句来实现计数循环,那么在for循环中一定存在控制次数的对象. 1. for循环 for循环是通过次数的大小来进行循环,通常 ...

  6. 循环结构_for循环

    循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将 ...

  7. Java流程控制03 循环结构 While循环 DoWhile循环 For循环 增强型For循环

    1. While循环 while(布尔表达式){//循环内容 } a. 只要布尔表达式为true,循环就会一直执行下去. b. 大多数情况下要让循环停止,徐亚一个让表达式失效的方式来结束循环. c. ...

  8. Java学习笔记2.5.1 循环结构 - 条件循环

    文章目录 零.本讲学习目标 一.为什么要用循环 (一)老老实实的笨方法 (二)采用循环结构的巧方法 1.采用计数循环(for循环) 2.采用条件循环(while循环) 二.条件循环 (一)前测试循环 ...

  9. 循环结构--for循环

    文章目录 循环结构 一.循环语句分类 1.for 循环 2.For 循环结构的使用 3.for循环练习 练习1 练习2 练习3 遍历100以内的偶数,输出所有偶数的和,输出偶数的个数 练习4 编写程序 ...

最新文章

  1. 第四次实验 恶意代码技术
  2. 如何理解社交效应「蒸发式降温」?
  3. 知识图谱应用合辑第一篇:多模态知识图谱的使用领域及最新进展
  4. axios中出现两次请求,OPTIONS请求和GET请求
  5. 九九乘法表[循环嵌套]
  6. pca降维的基本思想_百面机器学习 第四章 降维 PCA
  7. Java面试题总结系列 Servlet
  8. DCMTK findscu 查询信息
  9. SVN下载新的项目文件
  10. 揭秘 Win8 电脑 OEM 分区创建
  11. 计算机小学期实践报告,小学期计算机实践报告
  12. 华为USG防火墙及NGFW高可用性的规划与实施详解
  13. 关于保险的基础知识总结
  14. 知识图谱与推荐系统综述
  15. 一名大学毕业生的反思_反思我大学毕业时的软件工程师的第一年
  16. win10不识别移动硬盘
  17. 深入springboot怎么启动tomcat
  18. 力扣刷题pdf(java版本,内含暗黑版和光明版),都在这里了
  19. 使用ajax完成图片上传
  20. 高德地图-兴趣点(POI)

热门文章

  1. docker logs 说明
  2. 青龙面板库 大全(9.6更新)
  3. PC版微信发送无损视频除了使用压缩还有另外的方法
  4. 手机里android文件里哪些文件可删除,手机文件夹哪些可以删除?这4个删除它妥妥的...
  5. 汇率兑换程序python按温度转换_python复习+实例编写(1)——温度转换、汇率转换...
  6. python爬虫api接口,网易云音乐python爬虫api接口
  7. gps+wifi+mobile 5的手机参数对比
  8. 批处理文件方式 加密windows系统目录
  9. 抖音小店入驻条件及费用最新版,2022抖音开店,商家入门指南
  10. 关于Android 抓包 与 反抓包