简述GO条件语句

本文详细介绍了Go语言中的条件语句,包括if语句的基本用法,if...else结构,if嵌套,switch多条件判断,以及select通信控制。实例演示了如何根据成绩评估,运动赛事分类,和不同类型的数据操作。
摘要由CSDN通过智能技术生成

目录

GO 条件语句

1,if 语句

2,if...else 语句

3,if 语句嵌套

4,switch 语句

Type switch 语句

fallthrough

5,select 语句


GO 条件语句

条件语句需要开发者通过指定一个或多 个条件,并通过测试条件是否为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语句由布尔表达式后紧跟一个或多个语句组成。 Go编程语言中if语句的语法如下:

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

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

 

示例:

package main
​
import "fmt"
​
func main() {
    //考试成绩判断,并输出成绩
    source := 88
    if source < 60 {
        fmt.Println("你真是个小可爱,重新补考。考试成绩为", source)
    }
    fmt.Println("恭喜你考试合格,考试成绩为", source)
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
恭喜你考试合格,考试成绩为 88
​
[Done] exited with code=0 in 0.45 seconds

2,if...else 语句

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

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

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

 

示例:

package main
​
import "fmt"
​
func main() {
    //考试成绩判断,并输出成绩
    source := 88
    if source >= 60 {
        fmt.Println("恭喜你考试合格")
    } else {
        fmt.Println("你真是个小可爱,重新补考")
    }
    fmt.Println("考试成绩为", source)
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
恭喜你考试合格
考试成绩为 88
​
[Done] exited with code=0 in 0.437 seconds

3,if 语句嵌套

可以在if或else if语句中嵌入-个或多个if或else if语句。 if..else语句的语法如下: .

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

示例:

写法一:
package main
​
import "fmt"
​
//if语句嵌套
//田径比赛10秒内进入决赛,进入决赛后,男女分组
func main() {
    sec := 9.9   //比赛秒数
    sex := "boy" //性别
    if sec < 10 {
        fmt.Println("恭喜进入决赛")
        if sex == "boy" {
            fmt.Println("进入男子组")
        } else {
            fmt.Println("进入女子组")
        }
    } else {
        fmt.Println("未进入决赛")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
恭喜进入决赛
进入男子组
​
[Done] exited with code=0 in 0.445 seconds
写法二:
package main
​
import "fmt"
​
//if语句嵌套
//田径比赛10秒内进入决赛,进入决赛后,男女分组
func main() {
    sec := 9.9   //比赛秒数
    sex := "boy" //性别
    if sec < 10 && sex == "boy" {
        fmt.Println("恭喜进入决赛,分到男子组")
    }
    if sec < 10 && sex == "girl" {
        fmt.Println("恭喜进入决赛,分到女子组")
    }
    if sec >= 10 {
        fmt.Println("很遗憾,你没有进入决赛")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
恭喜进入决赛,分到男子组
​
[Done] exited with code=0 in 0.442 seconds

4,switch 语句

switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。 switch语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break. switch默认情况下case最后自带break语询,匹配成功后就不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough。 switch语句的语法如下:

Switch
var1 {
case val1:
I
case val2:
中..
default:
..
}

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

 

示例:

package main
​
import "fmt"
​
//switch语句多条件语句
//对学生成绩考核评级
func main() {
    source := 93
    switch {
    case source <= 100 && source >= 90:
        fmt.Println("你的成绩为优秀")
    case source < 90 && source >= 70:
        fmt.Println("你的成绩为良好")
    case source < 60 && source >= 60:
        fmt.Println("你的成绩为及格")
    default:
        fmt.Println("小可爱,你的成绩不及格")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
你的成绩为优秀
​
[Done] exited with code=0 in 0.453 seconds
package main
​
import "fmt"
​
func main() {
    value := 2
    switch value {
    case 1:
        fmt.Println("菜单1功能")
    case 2:
        fmt.Println("菜单2功能")
    case 3:
        fmt.Println("菜单3功能")
    case 4:
        fmt.Println("菜单4功能")
    default:
        fmt.Println("输入错误,请重新输入")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
菜单2功能
​
[Done] exited with code=0 in 0.447 seconds
package main
​
import "fmt"
​
func main() {
    var value int
    var grade string
    fmt.Println("请输入考试分数:")
    fmt.Scan(&value)
    switch {
    case value >= 90 && value <= 100:
        grade = "A"
    case value >= 80 && value < 90:
        grade = "B"
    case value >= 70 && value < 80:
        grade = "C"
    case value >= 60 && value < 70:
        grade = "D"
    case value < 60:
        grade = "E"
    default:
        grade = "输入错误。"
    }
    switch {
    case grade == "A":
        fmt.Println("你的成绩是优秀")
    case grade == "B":
        fmt.Println("你的成绩是良好")
    case grade == "C":
        fmt.Println("你的成绩是中等")
    case grade == "D":
        fmt.Println("你的成绩是及格")
    case grade == "E":
        fmt.Println("你的成绩是不及格")
    default:
        fmt.Println("未查询到等级。")
    }
    fmt.Printf("你的考试等级是:%s", grade)
}
PS F:\goProject\src\dev_code\day7\example7\main> go run .\main.go
请输入考试分数:
88
你的成绩是良好
你的考试等级是:B

Type switch 语句

switch语句还可以被用于type-switch来判断某个interface(接口)变量中实际存储的变量类型。 Type Switch语法格式如下:

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

示例:

package main
​
import "fmt"
​
func main() {
    var x interface{} //必须定义一个接口
//判断数据类型type只能使用搭配switch,如果想单独使用输出数据类型,需要使用反射
    switch i := x.(type) {
    case nil:
        fmt.Printf("x的类型是%T", i)
    case int:
        fmt.Printf("x的类型是%T", i)
    case float64:
        fmt.Printf("x的类型是%T", i)
    case bool:
        fmt.Printf("x的类型是%T", i)
    case string:
        fmt.Printf("x的类型是%T", i)
    default:
        fmt.Printf("未知型")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
x的类型是<nil>
[Done] exited with code=0 in 0.436 seconds
使用反射:
package main
​
import "fmt"
​
func main() {
    var num = true
    make_type(num)
}
​
//判断数据类型type只能使用搭配switch,如果想单独使用输出数据类型,需要使用反射
func make_type(x interface{}) {
    switch i := x.(type) {
    case nil:
        fmt.Printf("x的类型是%T", i)
    case int:
        fmt.Printf("x的类型是%T", i)
    case float64:
        fmt.Printf("x的类型是%T", i)
    case bool:
        fmt.Printf("x的类型是%T", i)
    case string:
        fmt.Printf("x的类型是%T", i)
    default:
        fmt.Printf("未知型")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
x的类型是bool
[Done] exited with code=0 in 0.441 seconds
package main
​
import (
    "fmt"
    "reflect"
)
​
//反射,判断数据类型  (利用go里面的一个函数)
func main() {
    var num = 100
    fmt.Println("num的数据类型是:", reflect.TypeOf(num))
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
num的数据类型是: int
​
[Done] exited with code=0 in 0.444 seconds

fallthrough

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

示例:

package main
​
import "fmt"
​
func main() {
    switch {
    case false:
        fmt.Println("1,case判断语句为false")
        fallthrough
    case true:
        fmt.Println("2,case判断语句为true")
        fallthrough
    case false:
        fmt.Println("3,case判断语句为false")
        fallthrough
    case true:
        fmt.Println("4,case判断语句为true")
        fallthrough
    case false:
        fmt.Println("4,case判断语句为false")
    default:
        fmt.Println("6,默认的case")
    }
}
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
2,case判断语句为true
3,case判断语句为false
4,case判断语句为true
4,case判断语句为false
​
[Done] exited with code=0 in 0.418 seconds

5,select 语句

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

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"
    "time"
)
​
func Chann(ch chan int, stopCh chan bool) {
    for j := 0; j < 10; j++ {
        ch <- j
        time.Sleep(time.Second)
    }
    stopCh <- true
}
func main() {
    ch := make(chan int)
    c := 0
    stopCh := make(chan bool)
    go Chann(ch, stopCh)
    for {
        select {
        case c = <-ch:
            fmt.Println("receive C", c)
        case s := <-ch:
            fmt.Println("receive S", s)
        case _ = <-stopCh:
            goto end
        }
    }
end:
}
​
[Running] go run "f:\goProject\src\dev_code\day5\example5\main\main.go"
receive S 0   //高并发的一种案例
receive S 1
receive S 2
receive S 3
receive C 4
receive C 5
receive S 6
receive C 7
receive S 8
receive S 9
​
[Done] exited with code=0 in 10.416 seconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值