目录
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 secondspackage 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