美文网首页
go学习三·分支语句

go学习三·分支语句

作者: 那钱有着落吗 | 来源:发表于2021-03-08 10:39 被阅读0次

    在go中的 if,switch,for在与其他语言基本一致情况下多了一些功能

    2.2 if 变体

    如果其中包含一个可选的语句组件(在评估条件之前执行),则还有一个变体。它的语法是
    
    if statement; condition {  
    }
    
    if condition{
        
        
    }
    示例代码:
    
    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        if num := 10; num % 2 == 0 { //checks if number is even
            fmt.Println(num,"is even") 
        }  else {
            fmt.Println(num,"is odd")
        }
    }
    需要注意的是,num的定义在if里,那么只能够在该if..else语句块中使用,否则编译器会报错的。
    

    2.switch

    Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。

    变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。 您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

    switch var1 {
        case val1:
            ...
        case val2:
            ...
        default:
            ...
    }
    
    package main
    
    import "fmt"
    
    func main() {
       /* 定义局部变量 */
       var grade string = "B"
       var marks int = 90
    
       switch marks {
          case 90: grade = "A"
          case 80: grade = "B"
          case 50,60,70 : grade = "C"  //case 后可以由多个数值
          default: grade = "D"  
       }
    
       switch {
          case grade == "A" :
             fmt.Printf("优秀!\n" )     
          case grade == "B", grade == "C" :
             fmt.Printf("良好\n" )      
          case grade == "D" :
             fmt.Printf("及格\n" )      
          case grade == "F":
             fmt.Printf("不及格\n" )
          default:
             fmt.Printf("差\n" );
       }
       fmt.Printf("你的等级是 %s\n", grade );      
    }
    

    如需贯通后续的case,就添加fallthrough

    package main
    
    import (
        "fmt"
    )
    
    type data [2]int
    
    func main() {
        switch x := 5; x {
        default:
            fmt.Println(x)
        case 5:
            x += 10
            fmt.Println(x)
            fallthrough
        case 6:
            x += 20
            fmt.Println(x)
        }
    }
    

    运行结果:

    15
    35

    case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。

    示例代码:

    package main
    
    import (  
        "fmt"
    )
    
    func main() {  
        num := 75
        switch { // expression is omitted
        case num >= 0 && num <= 50:
            fmt.Println("num is greater than 0 and less than 50")
        case num >= 51 && num <= 100:
            fmt.Println("num is greater than 51 and less than 100")
        case num >= 101:
            fmt.Println("num is greater than 100")
        }
    
    }
    

    switch的注意事项
    case后的常量值不能重复
    case后可以有多个常量值
    fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

    3.Type Switch

    switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

    switch x.(type){
        case type:
           statement(s);      
        case type:
           statement(s); 
        /* 你可以定义任意个数的case */
        default: /* 可选 */
           statement(s);
    }
    package main
    
    import "fmt"
    
    func main() {
       var x interface{}
         
       switch i := x.(type) {
          case nil:   
             fmt.Printf(" x 的类型 :%T",i)                
          case int:   
             fmt.Printf("x 是 int 型")                       
          case float64:
             fmt.Printf("x 是 float64 型")           
          case func(int) float64:
             fmt.Printf("x 是 func(int) 型")                      
          case bool, string:
             fmt.Printf("x 是 bool 或 string 型" )       
          default:
             fmt.Printf("未知型")     
       }   
    }
    

    运行结果:

    x 的类型 :<nil>

    相关文章

      网友评论

          本文标题:go学习三·分支语句

          本文链接:https://www.haomeiwen.com/subject/maghqltx.html