zoukankan      html  css  js  c++  java
  • Go语言基础之流程控制for循环

    Go语言基础之流程控制for循环

    一、for(循环结构)

    Go 语言中的所有循环类型均可以使用for关键字来完成。

    for循环的基本格式如下:

    for 初始语句;条件表达式;结束语句{
        循环体语句
    }
    

    初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 结束语。结束语句将在每次成功循环迭代后执行。在执行 结束语句后,条件将被再次检查。如果为 true, 则循环将继续执行,否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处的 结束语句)

    这三个组成部分,即初始化,条件和 结束语句都是可选的。

    条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。

    func forDemo() {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
        }
    }
    

    for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:

    func forDemo2() {
        i := 0
        for ; i < 10; i++ {
            fmt.Println(i)
        }
         b := 1
    	for ; b < 10; {
    		fmt.Println(" 第二种方式 全局作用局:", b)
    		b++
    	}
    }
    

    for循环的初始语句和结束语句都可以省略,例如:

    func forDemo3() {
        i := 0
        for i < 10 {
            fmt.Println(i)
            i++
        }
        
       
    }
    
    

    这种写法类似于其他编程语言中的while,在while后添加一个条件表达式,满足条件表达式时持续循环,否则结束循环。

    二、无限循环

    for {
        循环体语句
    }
    
    # 方式一
    for  {
    		fmt.Println("sss")
    	}
    
    # 方式二
    for ; ; {
    		fmt.Println("sss")
    	}
    
    # 方式三
    for true {
    	//	fmt.Println("sss")
    	//}
    
    
    // break 退出
    for  {
        fmt.Println("sss")
        break
    }
    // continue 
    for  {
        fmt.Println("sss")
        continue
    }
    

    for循环可以通过breakgotoreturnpanic语句强制退出循环。

    三、for range(键值循环)

    Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

    1. 数组、切片、字符串返回索引和值。
    2. map返回键和值。
    3. 通道(channel)只返回通道内的值。
    // 循环数组
    names:=[4]string{"张三","李四","王五"}
    for i,v:=range names{
    fmt.Println(i,v)
    }
    

    1 张三
    2 李四
    3 王五

    // 循环切片
    names:=[]string{"张三","李四","王五"}
    for i,v:=range names{
    fmt.Println(i,v)
    }
    

    1 张三
    2 李四
    3 王五

    // 循环字符串
    for i,v:=range "hello你好"{
    fmt.Printf("%d %q
    ",i,v)
    }
    

    0 'h'
    1 'e'
    2 'l'
    3 'l'
    4 'o'
    5 '你'
    8 '好'

    // map返回键和值
    ages:=map[string]int{
    "张三":20,
    "李四":30,
    }
    for i,v:=range ages{
    fmt.Println(i,v)
    }
    

    李四 30
    张三 20

    四、break和continue

    break

    break 语句用于在完成正常执行之前突然终止 for 循环,之后程序将会在 for 循环下一行代码开始执行。

    让我们写一个从 1 打印到 5 并且使用 break 跳出循环的程序。

    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        for i := 1; i <= 10; i++ {
            if i > 5 {
                break //loop is terminated if i > 5
            }
            fmt.Printf("%d ", i)
        }
        fmt.Printf("
    line after for loop")
    }
    

    在上面的程序中,在循环过程中 i 的值会被判断。如果 i 的值大于 5 然后 break 语句就会执行,循环就会被终止。打印语句会在 for 循环结束后执行,上面程序会输出为

    1 2 3 4 5  
    line after for loop
    

    continue

    continue 语句用来跳出 for 循环中当前循环。在 continue 语句后的所有的 for 循环语句都不会在本次循环中执行。循环体会在一下次循环中继续执行。

    让我们写一个打印出 1 到 10 并且使用 continue 的程序。

    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        for i := 1; i <= 10; i++ {
            if i%2 == 0 {
                continue
            }
            fmt.Printf("%d ", i)
        }
    }
    

    在上面的程序中,这行代码 if i%2==0 会判断 i 除以 2 的余数是不是 0,如果是 0,这个数字就是偶数然后执行 continue 语句,从而控制程序进入下一个循环。因此在 continue 后面的打印语句不会被调用而程序会进入一下个循环。上面程序会输出 1 3 5 7 9

    五、总结

    1. for分支的基本结构
    for 初始化; 条件; 表达式{
    	逻辑代码
    }
    
    1. for分支几种方式的演变,省略初始化,省略初始化和表达式,while实现
    2. 死循环方式的演变
    3. brak和continue
    for 初始化;条件;自增{
      内容
      初始化的内容只能再内部使用
    }
    
    for ;条件;自增{
      省略初始化
    }
    
    for ;条件;{
      省略初始化
      省略自增
    }
    
    for 条件{ 
      省略初始化
      省略自增
      去掉两个分号
      等同于while
    }
    
    for {
      省略初始化
      省略自增
      去掉两个分号
      去掉条件,就是死循环
    }
    
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    linux 使用crontab定时任务+shell脚本删除tomcat日志elasticsearch日志索引
    【转】Java8 Stream 流详解
    Mongo查询list数组中一个字段大于特定条数
    安装Elasticsearch出现 node validation exception 的问题处理
    mockito使用教程
    rocketmq4.4配置日志路径等级
    使用ResponseBodyAdvice统一包装响应返回String的时候出现java.lang.ClassCastException: com.xxx.dto.common.ResponseResult cannot be cast to java.lang.String
    服务器22端口连接超时 ssh: connect to host *** port 22: Operation timed out
    【JAVA基础】24 递归练习
    【JAVA基础】23 IO流-其他流
  • 原文地址:https://www.cnblogs.com/randysun/p/15409398.html
Copyright © 2011-2022 走看看