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
    
  • 相关阅读:
    xmlHttpRequest参数
    蒙哥马利:“沙漠之狐”猎手
    c# as is 类型转换
    值类型和引用类型
    BuuctfmiscN种方法解决
    Buuctfmisc二维码
    Buuctfweb[HCTF 2018]WarmUp
    Buuctfmisc大白
    map用索引作下标之后,再插值时报错.
    c++ stl 的string 的size() legth()区别
  • 原文地址:https://www.cnblogs.com/love9527/p/8671121.html
Copyright © 2011-2022 走看看