文章目录
- 一、前言
- 二、if
-
- 1、单分支
-
- Go语法规范:
- 2、双分支
-
- Go语法规范
- 3、多分支
- 三、switch
-
- 1、基本语法
- 2、语法规范
-
- 1)switch
- 2)case
- 3)default
- 四、总结
-
- 对比Java来看
-
- 1)if
- 2)switch
一、前言
Go系列文章:
- GO开篇:手握Java走进Golang的世界
- 2 Go开发环境搭建、Hello World程序运行
- 3 Go编程规约和API包
- 4 Go的变量、常量、运算符
- 5 Go 基本数据类型
- 6 Go 复杂数据类型之指针
Go专栏传送链接:https://blog.csdn.net/saintmm/category_12326997.html
二、if
if 语句由布尔表达式后紧跟一个或多个语句组成。
if分支结构和其他语言是一样的概念,仅仅API的使用上有细微差别。
1、单分支
基本语法:
if (条件表达式) {
逻辑代码
}
当条件表达式为true时,会执行{}中的逻辑代码。
package main
import "fmt"
func main() {
age := 35
if age >= 35 {
fmt.Println("正式工作了,开整开整")
}
}
Go语法规范:
- 条件表达式左右的()可以不写,建议不写;
- if和表达式中间,一定要有空格;
- {}是必须有的,哪怕只写一行代码;在Java中if代码块中仅有一行代码时,可以省略{}
2、双分支
基本语法:
if 条件表达式 {
逻辑代码1
} else {
逻辑代码2
}
当条件表达式成立时,执行逻辑代码1;否则执行逻辑代码2。
func main() {
age := 35
if age >= 35 {
fmt.Println("正式工作了,开整开整")
} else {
fmt.Println("该吃吃该喝喝,耍一耍")
}
}
Go语法规范
-
else 和 } 不能分行。下面的代码编写方式是错误的
if 条件表达式 { 逻辑代码1 } else { 逻辑代码2 }
3、多分支
基本语法:
if 条件表达式1 {
逻辑代码1
} else if 条件表达式2 {
逻辑代码2
} else {
逻辑代码3
}
如果走了一个分支,其他分支不会再去判断执行。
package main
import "fmt"
func main() {
age := 35
if age >= 35 {
fmt.Println("正式工作了,开整开整")
} else if age 3 {
fmt.Println("good good study, day day up")
} else {
fmt.Println("该吃吃该喝喝,耍一耍")
}
}
三、switch
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面不需要再加 break;默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case。
1、基本语法
语法:
switch 表达式 {
case value1...:
代码逻辑1
case value5,value6...:
代码逻辑2
case value7...:
代码逻辑3
default:
代码逻辑4
}
package main
import "fmt"
func main() {
score := 98
// 根据分数判断等级
switch score / 10 {
case 9, 10:
fmt.Println("优秀")
case 7, 8:
fmt.Println("良好")
case 6:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
default是用来“兜底”的一个分支,当其它case分支都不走时会走default分支。
2、语法规范
1)switch
- switch后是一个表达式,可以是常量值、变量、有返回值的函数…
- 在Java中,常用的Java8里,支持的数据类型为:byte、short、int、long、char、String、enum。
- switch后可以不跟表达式,直接仿作if分支来使用;
- switch后也可以直接声明/定义一个变量,分号结束,不推荐使用
-
switch穿透:利用fallthrough关键字,如果在case语句块后增加fallthrough ,则会继续执行下一个case,default也能穿透到;
2)case
-
case后面的值如果是常量值,不能重复;
-
case后值的数据类型 必须和switch表达式返回值的数据类型一致;
-
case后可以跟多个值,使用逗号间隔,比如:case value1,value2,value3
-
case后面不需要加break;默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case。
3)default
- default分支可以放在任意位置上,不一定非要放在最后;
四、总结
go语言中对if、switch语法的要求更加严格,相对于Java等高级语言而言,也有了更多的特性:比如:switch支持表达式、支持穿透、case支持多个值。
对比Java来看
1)if
Go中的if和Java中的if使用相同,Go语言中只是把if后面的小括号给去掉了。
Java中的if
if (num > 10) {
....
}
Go中的if
if num > 10 {
....
}
2)switch
Go中的switch和Java中的switch使用基本相同;区别在于:
- Go中把switch后面的小括号给去掉了;
- Go中的switch每一个case中不需要写break,Java需要写(不写,则全部穿透)。
- Go中的switch特性更加丰富,支持表达式、支持穿透、case支持多个值。
- Java中不支持case多个值。
Java中的switch
int score = 98;
// 根据分数判断等级
switch (score / 10) {
case 10:
case 9:
System.out.println("优秀");
case 8:
case 7:
System.out.println("良好");
break;
case 6:
System.out.println("及格");
break;
default:
System.out.println("不及格");
break;
}
Go中的switch
score := 98
// 根据分数判断等级
switch score / 10 {
case 9, 10:
fmt.Println("优秀")
// switch穿透, 继续执行下一个case
fallthrough
case 7, 8:
fmt.Println("良好")
case 6:
fmt.Println("及格")
default:
fmt.Println("不及格")
}