• go:控制结构


    1. if-else

      condition 不需要用 () 括起来;

      关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。

      只存在单个分支时:

    // { 必须和 if 在同一行
    if condition {
       // do something  
    }

      存在两个分支时:

    // { 必须和 if 在同一行
    if condition {
       // do something  
    } else {  // { 必须和 else 在同一行
       // do something  
    }

       存在两个以上的分支时:

    // { 必须和 if 在同一行
    if condition {
       // do something  
    } else if  condition2{  //  { 必须和 else if 在同一行
       // do something 
    } else {  // { 必须和 else 在同一行
       // do something  
    }

      存在较多的分支时,建议使用 swaitch 结构,这样可读性更好

    1.1 if 包含一个初始化语句

      if 后跟一个初始化语句,然后跟分号 ' ; ',然后跟条件表达式

        if cc := 12;cc > 10 {
            fmt.Println("cc is > 10",cc)
        }

      通过函数返回值为初始化变量赋值

    func controlIf(condition int)  {
    
        if cc := add(13);cc > 10 {
            fmt.Println("cc is > 13",cc)
        }
    }
    
    func add(i int)(result int)  {
    
        return i+1
    }

    2. swaitch

      相比于Java,switch 更加灵活,它可以接收任意形式的表达式,一般结构为

    switch var {
        case var1:
                ...
        case var2:
                ...default:
                ...
    }

      1. var、var1、var2 可以使同类型的任意值,或者最终结果为相同类型的表达式;

      2. switch 关键字必须和 { 在同一行;

      3. 当匹配到某个case分之后,执行完相应的代码后自动退出 switch 结构,不需要使用 break 来退出switch 结构;

      4. 执行完匹配的分支后,若要继续执行下面的分支,可以在匹配的分支后添加 fallthrough 关键字实现;

      5. var1、var2 这些变量可以替换为表达式;

    // condition = 2
    func controlSwitch(condition int)  {
    
        condition =2
        switch condition {
        // controlSwitch: 2
        case 1:
            fmt.Println("controlSwitch:",condition)
        case 2:
            fmt.Println("controlSwitch:",condition)
        default:
            fmt.Println("controlSwitch:",condition)
        }
    
        switch condition {
        /**
            fallthrough controlSwitch: 2
            fallthrough controlSwitch: 3
            fallthrough controlSwitch: default
         */
        case 2:
            fmt.Println("fallthrough controlSwitch:",2)
            fallthrough
        case 3:
            fmt.Println("fallthrough controlSwitch:",3)
            fallthrough
        default:
            fmt.Println("fallthrough controlSwitch:","default")
        }
    
        cc :=2
        switch condition/2 {
        // controlSwitch: cc/2
        case cc/2:
            fmt.Println("controlSwitch:","cc/2")
        case 2:
            fmt.Println("controlSwitch:",2)
        default:
            fmt.Println("controlSwitch:","default")
        }
    }
    View Code

    3. for

    3.1 基于计数器的迭代

    func controlFor(condition int)  {
        for i :=0;i<condition ; i++  {
            fmt.Println("controlFor:",i)
        }
    }

      变量 i 的生命周期在循环完成后就已经结束,下次循环时还可以继续使用变量i

    3.2 基于条件判断的迭代

      类似于 while 循环

        var x = 5
        
        for x > 0{
            x--
        }

    3.3 无限循环

      三种形式效果一样

        for {
            fmt.Println(123)
        }
        for ; ;  {
            fmt.Println(123)
        }
        for true  {
            fmt.Println(123)
        }

    3.4 for-range

      类似于 Java 的 foreach,但是该结构可以直接获取到当前遍历元素的下标,并且不用显示指定 遍历元素的类型

        var array [5]int
        for key, value := range array {
            fmt.Println(key,value)
        }
    /**
        输出
          0 0
          1 0
          2 0
          3 0
          4 0
     */

    4. break、continue

    4.1 break

      一个 break 的作用范围为该语句出现后的最内部的结构,它可以被用于任何形式的 for 循环(计数器、条件判断等)。但在 switch 或 select 语句中,break 语句的作用结果是跳过整个代码块,执行后续的代码。

    4.2 continue

      continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件

  • 相关阅读:
    Struts2
    HIbernate缓存
    spring的静态代理和动态代理
    JVM与垃圾回收机制(GC)和类的生命周期
    java开发设计六大基本原则
    数据表链表结构
    HashMap的底层实现
    string与位运算
    log4j和logback
    C#深入类的方法
  • 原文地址:https://www.cnblogs.com/virgosnail/p/12918471.html
Copyright © 2020-2023  润新知