GO语言的条件判断语句

目录

1、if语句

流程图

示例

2、if else语句

流程图

示例

3、if语句嵌套

 示例

4、switch语句

流程图

示例

Type Switch

示例

fallthrough

示例

5、select语句


条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况在执行另外的语句。

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

1、if语句

if 语句由布尔表达式后紧跟一个或多个语句组成。

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

}

流程图

示例

2、if else语句

if语句后可以使用可选的else语句, else语句中的表达式在布尔表达式为false时执行。

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

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

}

if 在布尔表达式为 true 时,其后紧随的语句块执行,如果为 false 则执行 else 语句块

流程图

 

示例

3、if语句嵌套

以在if或else if 语句中嵌入一个或多个if或else if 语句。

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

 示例

4、switch语句

switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。

switch语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break

switch 默认情况下case最后自带 break语句,匹配成功后就不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough 。

switch var1 {
   case val1:
   ...
   case val2:
   ...
   default:
   ...
}

变量 var1 可以是任何类型,而 val1 和val2 则可以是同类型的任意值,类型不被局限于常量或整数,但是必须是相同的类型;或者最终结果为相同类型的表达式

流程图

示例

Type Switch

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

判断接口类型——引入空接口

switch x.(type){
    case type :
        statement(s);
    case Iype:
        statement(s);
/*你可以定义任意个数的case */
    default:/*可选*/
        statement(s);
}

示例

写法一

package main

import "fmt"

//全局变量可以不被调用,函数中申明的变量一定要被使用,否则会报错

//type-switch语句,判断数据类型

func main() {
	var x interface{}
	//判断数据类型type只能使用搭配switch,如果想单独使用输出数据类型,需要使用反射
	switch i := x.(type) {
	case nil:
		fmt.Printf("数据类型为%T", i)
	case int:
		fmt.Printf("数据类型为int")
	case float32, float64:
		fmt.Printf("数据类型是浮点型")
	case string:
		fmt.Printf("数据类型是字符串")
	case bool:
		fmt.Printf("数据类型是布尔型")
	default:
		fmt.Printf("数据类型是其他类型")
	}
}

##
数据类型为<nil>

 写法二

package main

import "fmt"

//全局变量可以不被调用,函数中申明的变量一定要被使用,否则会报错
//type-switch语句,判断数据类型

func main() {
	var number = 123
	oyyy(number)

}

func oyyy(x interface{}) {
	switch i := x.(type) {
	case nil:
		fmt.Printf("数据类型为%T", i)
	case int:
		fmt.Printf("数据类型为int")
	case float32, float64:
		fmt.Printf("数据类型是浮点型")
	case string:
		fmt.Printf("数据类型是字符串")
	case bool:
		fmt.Printf("数据类型是布尔型")
	default:
		fmt.Printf("数据类型是其他类型")
	}
}
##
数据类型为int

写法三

//反射

package main

import (
	"fmt"
	"reflect"
)

//反射原理判断数据类型
func main() {
	var number *int
	fmt.Println("数据类型是:", reflect.TypeOf(number))
}
##
数据类型是: *int

fallthrough

使用falthrough 会强制执行后面的case语句,fallthrough不会判断下一条case的表达式结果是否为true。

示例

package main

import "fmt"

//fallthrough语句无视后面语句的判断结果,继续往下执行

func main() {
	switch {
	case false:
		fmt.Println("1为false")
		fallthrough
	case true:
		fmt.Println("2为true")
		fallthrough
	case false:
		fmt.Println("3为flase")
	case true:
		fmt.Println("4为true")
		fallthrough
	default:
		fmt.Println("5")
	}
}
##
2为true
3为flase

5、select语句

select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。

select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。

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

  • 每个case都必须是一个通信

  • 所有channel表达式都会被求值

  • 所有被发送的表达式都会被求值

  • 如果任意某个通信可以进行,它就执行,其他被忽略。

  • 如果有多个case都可以运行,Select 会随机公平地选出一个执行。其他不会执行。否则:

    • 如果有default子句,则执行该语句。

    • 如果没有default子句,select将阻塞,直到某个通信可以运行;Go不会重新对channel或值进行求

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值