• Go 循环控制


    #### Go 循环控制
    昨天有工作要忙, 断更一天,不过学习的事情,还是每天要坚持;
    我还有头发, 还能学习^_^.
    ***倘若我心中的山水, 你眼中都看到***
    上一节学习完流程控制,总结一下switch 和 if 的区别;
    1. 如果判断的具体数值不多, 而且符合整数,浮点数,字符,字符串这几种类型,建议使用switch语句;
    2. 其它情况如: 区间判断和结果为bool类型的判断使用if;
    ---
    ##### for 循环控制
    在Go 中只有一种循环,就是for 循环,这符合Go 的哲学思想: 少即是多;
    for 基本语法:
    for 循环变量初始化;循环条件;循环变量迭代{
    // 循环语句
    }
    for 循环执行流程分析

     
    for 循环注意事项和细节
    1. for 条件循环返回的是一个bool 类型的表达式
    2. for 循环的另一种使用方式
    for 循环判断条件 {
    // 循环语句
    }
    3. for 循环的第三种写法,类似于无限循环, 可以配合break 使用;
    for {
    // 循环语句
    }
    4. for range 方式可以方便遍历字符串和数组
    5. 如果字符串含有中文,使用传统的方式遍历字符串是错误的,会出现乱码: ***传统的方式对字符串的遍历是按照字节遍历,但是一个汉字在utf8中对应的编码为3个字节;**
    将 str 转成[]rune 切片即可;
    package main
    
    import "fmt"
    
    func main(){
       for i:=0;i<10;i++{
          fmt.Println(i)
       }
       // for 循环的第二种写法
       var a = 1
       for a < 10 {
          fmt.Println(a)
          a ++
       }
       // for 循环的第三种写法
       // 这种写法等价于无限循环, 可以配合break 使用
       var b = 1
       for {
          if b >= 10 {
             break
          }
          b ++
       }
       // for range
       var c = "abcdef"
       for i,val := range c {
          fmt.Printf("index=%d value=%c
    ",i,val)
       }
       // 对于有中文的字符串遍历方式
       var d = "你好,世界!"
       // 传统方式
       str := []rune(d)
       for i:=0;i<len(str);i++{
          fmt.Printf("index=%d value=%c
    ",i,str[i])
       }
       // for range 方式
       for i,val := range d{
          fmt.Printf("index=%d value=%c
    ",i,val)
       }
    }
    

      


    ##### while 的实现
    Go 中没有while 或者while do 这种 语法, 但是可以通过for 循环来实现这种效果,见for 循环第三种方式;
    ##### 多层循环
    将一个循环放在另一个循环体内,形成循环嵌套, 在外面的for 称为外层循环,在里面的for 称为内层循环,多重循环建议最多不超过3层;
    外层循环次数为m 次, 内层为n次, 则内层循环体实际需要执行m*n 次;
    package main
    
    import "fmt"
    
    func main(){
       for i :=1;i<10;i++{
          for j :=1;j<=i;j++{
             fmt.Printf("%d * %d = %d	",j,i,i*j)
          }
          fmt.Println()
       }
    }
    

      


    ##### break

     
    break 用于中断当前for 或跳出switch 语句; 默认情况下break 跳出最近的for 循环;当break 出现在多层循环中, 可以通过标签指明要终止哪一层循环;
    package main
    
    import "fmt"
    
    func main(){
       // 设置标签
       first:
          for i:=0;i<10;i++{
             for j:=0;j<10;j++{
                if j == 3 {
                   break first // 按标跳出
                }
                fmt.Println(j)
             }
          }
    }
    

      


    ##### continue

       
    continue 用于结束本次循环,继续执行下一次循环;默认情况下路过的是最近循环,当contine 出现在多层循环中, 可以通过标签指定要路过哪一层循环;
    package main
    
    import (
       "fmt"
       "strings"
    )
    
    func main() {
    
       for i := 0; i < 10; i++ {
          for j := 0; j < 10; j++ {
             if j == 3 {
                continue
             }
             fmt.Println(j)
          }
       }
       fmt.Println(strings.Repeat("=",100))
       first:
          for i := 0; i < 10; i++ {
             for j := 0; j < 10; j++ {
                if j == 3 {
                   continue first // continue 使用标签 
                }
                fmt.Println(j)
             }
          }
    }
    

      


    ##### goto 语句
    Go 中可以使用goto 语句无条件转移到程序中指定的行
    通常与条件语句配合使用;
    在Go 中不建议使用goto 以免造成程序流程混乱,使理解和调试困难;
    package main
    
    import "fmt"
    
    func main() {
       for i:=1;i<10;i++{
          if i % 2 == 0 {
             goto first
          } else {
             fmt.Println(i)
          }
       }
       first:
          fmt.Println("this is goto block")
    }
    

      


    流程控制这块基本学习完啦, 下面我们将逐渐接触高级知识;
    最近在写微信公众号,欢迎大家关注,一同交流学习;


    ***学习,我们一直在路上***


  • 相关阅读:
    使用尾递归对斐波那契优化?
    Ajax是什么?包含什么技术?有什么作用?
    Ajax的乱码解决问题?
    Ajax的核心的对象是什么?
    为什么Java中不支持多重继承?
    vue-router的原理,例如hashhistory和History interface?
    JSP是什么?有什么特点?
    forward 和redirect的区别?
    Listener是什么?有什么作用?
    请说一说Servlet的生命周期?
  • 原文地址:https://www.cnblogs.com/Mail-maomao/p/11376222.html
Copyright © 2020-2023  润新知