zoukankan      html  css  js  c++  java
  • Go语言【第五篇】:Go条件语句

    Go语言条件

    条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句。下图展示了程序语言中条件语句的结构:

    Go语言提供了以下几种条件判断语句:

    语句 描述
    if语句 if语句由一个布尔表达式后紧跟一个或多个语句组成
    if...else语句 if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行
    if嵌套语句 可以在ifelse if语句中嵌入一个或多个ifelse if语句
    switch语句 switch语句用于基于不同条件执行不同动作
    select语句 select语句类似于switch语句,但是select会随机执行一个可运行的case,如果没有case可以运行,它将阻塞,直到有case可运行

    Go语言if语句
    if语句由布尔表达式后紧跟一个或多个语句组成,其语法如下:

    if 布尔表达式 {
        /* 在布尔表达式为 true时执行 */
    }
    

    if在布尔表达式为true时,其后紧跟的语句块执行,如果为false则不执行。流程如如下:

    实例代码:

    package main
    
    import "fmt"
    
    func main()  {
    	/* 定义局部变量 */
    	var a int = 10
    	/* 使用if语句判断布尔表达式 */
    	if a < 20 {
    		/* 如果条件为true则执行以下语句 */
    		fmt.Printf("a 小于 20
    ")
    	}
    	fmt.Printf("a 的值为:%d
    ", a)
    }
    

    以上代码执行结果为:

    a 小于 20
    a 的值为:10
    

    Go语言if...else语句
    if语句后可以使用可选的else语句,else语句中的表达式在布尔表达式为false时执行,其语法为:

    if 布尔表达式{
        /* 在布尔表达式为true时执行 */
    }else {
        /* 在布尔表达式为false时执行 */
    }
    

    if在布尔表达式为true时,其后紧跟的语句块执行,如果为false则执行else语句块,流程图如下:

    实例代码:

    package main
    
    import "fmt"
    
    func main()  {
    	/* 定义局部变量 */
    	var a int = 100
    
    	/* 判断布尔表达式 */
    	if a < 20 {
    		/* 如果条件为true则执行以下语句 */
    		fmt.Printf("a 小于 20
    ")
    	}else {
    		/* 如果条件为false则执行以下语句 */
    		fmt.Printf("a 不小于 20
    ")
    	}
    	fmt.Printf("a 的值为:%d
    ", a)
    }
    

    以上实例运行结果:

    a 不小于 20
    a 的值为:100
    

    Go语言if嵌套
    可以在if或者else if语句中嵌套一个或者多个if或else if语句,其语法如下:

    if 布尔表达式 1 {
        /* 在布尔表达式 1 为true时执行 */
        if 布尔表达式 2 {
        /* 在布尔表达式 2 为true时执行 */
        }
    }
    

    可以使用同样的方式在if语句中嵌套else if ... else语句
    实例代码:

    package main
    
    import "fmt"
    
    func main()  {
    	/* 定义局部变量 */
    	var a int = 100
    	var b int = 200
    
    	/* 判断条件 */
    	if a == 100 {
    		/* if 条件语句为 true 执行 */
    		if b == 200 {
    			/* if 条件语句为 true 执行 */
    			fmt.Printf("a 的值为100, b 的值为200
    ")
    		}
    	}
    	fmt.Printf("a 值为:%d
    ", a)
    	fmt.Printf("b 值为:%d
    ", b)
    }
    

    以上代码运行结果:

    a 的值为100, b 的值为200
    a 值为:100
    b 值为:200
    

    Go语言switch语句
    switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止;switch语句执行的过程从上至下,直到找到匹配项,匹配项后面不需要添加break,其语法如下:

    switch varl {
        case varl1:
            ...
        case val2:
            ...
        default:
            ...
    }
    

    变量varl可以是任何类型,而varl1和varl2则可以是同类型的任意值。类型不被局限于常量或整数,但必须时相同的类型,或者最终结果为相同类型的表达式。其流程如如下:

    实例代码:

    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"
    	default: grade = "D"
    	}
    
    	switch  {
    	case grade	== "A":
    		fmt.Printf("优秀!
    ")
    	case grade == "B", grade == "C":
    		fmt.Printf("良好!
    ")
    	case grade == "D":
    		fmt.Printf("及格!
    ")
    	case grade == "F":
    		fmt.Printf("不及格!
    ")
    	default:
    		fmt.Printf("差!
    ")
    	}
    	fmt.Printf("你的等级是 %s
    ", grade)
    }
    

    以上代码执行结果为:

    优秀!
    你的等级是 A
    

    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语言select语句
    select是Go中的一个控制结构,类似于通信的switch语句,每个case必须是一个通信操作,要么是发送要么是接收。select随机执行一个可运行的case,如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的,其语法如下:

    select {
        case communication clause:
            statement(s)
        case communication clause:
            statement(s)
        /* 可以定义任意数量的case */
        default:    // 可选
            statement(s)
    }
    

    以下描述了select语句的语法:

    • 每个case都必须是一个通信
    • 所有channel表达式都会被求值
    • 所有被发送的表达式都会被求值
    • 如果任意某个通信可以进行,他就执行,其他被忽略
    • 如果有多个case都可以运行,select会随机公平地选出一个执行,其他不会执行
      否则:
      1.如果有default子句,则执行该局;
      2.如果没有default子句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求值;

    代码实例:

    package main
    
    import "fmt"
    
    func main() {
       var c1, c2, c3 chan int
       var i1, i2 int
       select {
          case i1 = <-c1:
             fmt.Printf("received ", i1, " from c1
    ")
          case c2 <- i2:
             fmt.Printf("sent ", i2, " to c2
    ")
          case i3, ok := (<-c3):  // same as: i3, ok := <-c3
             if ok {
                fmt.Printf("received ", i3, " from c3
    ")
             } else {
                fmt.Printf("c3 is closed
    ")
             }
          default:
             fmt.Printf("no communication
    ")
       }    
    }
    

    以上代码执行结果:

    no communication
    
  • 相关阅读:
    Trapping Rain Water
    Construct Binary Tree from Preorder and Inorder Traversal
    Flatten Binary Tree to Linked List
    Permutations II
    Unique Paths II
    Path Sum II
    Unique Binary Search Trees II
    evdev module-----uinput.py
    evdev module-----events.py
    evdev module-----device.py
  • 原文地址:https://www.cnblogs.com/love9527/p/8671121.html
Copyright © 2011-2022 走看看