第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > Go 学习笔记(8)— 条件语句(if if...else... switch fallthrough)

Go 学习笔记(8)— 条件语句(if if...else... switch fallthrough)

时间:2022-03-07 22:58:56

相关推荐

Go 学习笔记(8)— 条件语句(if if...else... switch fallthrough)

Go语言提供了以下几种条件判断语句:

1. if 语句

Go语言中if语句的语法如下:

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

示例:

package mainimport "fmt"func main() {/* 定义局部变量 */var a int = 10/* 使用 if 语句判断布尔表达式 */if a < 20 {/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n" )}fmt.Printf("a 的值为 : %d\n", a)}

if语句特点:

if后面的条件判断子句不需要用小括号括起来;

必须放在行尾,和if或者else if放在一行;

if后面可以带一个简单的初始化语句,并以分号分割,该简单语句声明的变量的作用域是整个if语句块,包括后面的else ifelse分支;

if分支语句遇到return后直接返回,遇到break则跳过break下方的if语句块;

if还有一种特殊的写法,可以在if表达式之前添加一个执行语句,再根据变量值进行判断,代码如下:

if x :=f(); x<y{ // 初始化语句中的声明变量xreturn x} else if x > z {// x 在else if 里面一样可以被访问return z} else {return y}

f()是一个带有返回值的函数,x := f()是一个语句,执行 f() 后,将返回值保持在变量x中。x<y才是 if 的判断表达式,这种写法可以将返回值与判断放在一行进行处理,而且返回值的作用范围被限制在 if、else 语句组合中。

2. if…else… 语句

Go语言中if...else...语句的语法如下:

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

示例:

package mainimport "fmt"func main() {/* 局部变量定义 */var a int = 100;/* 判断布尔表达式 */if a < 20 {/* 如果条件为 true 则执行以下语句 */fmt.Printf("a 小于 20\n" );} else {/* 如果条件为 false 则执行以下语句 */fmt.Printf("a 不小于 20\n" );}fmt.Printf("a 的值为 : %d\n", a);}

3. if 语句嵌套

Go语言中if嵌套语句的语法如下:

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

示例:

package mainimport "fmt"func main() {/* 定义局部变量 */var a int = 100var b int = 200/* 判断条件 */if a == 100 {/* if 条件语句为 true 执行 */if b == 200 {/* if 条件语句为 true 执行 */fmt.Printf("a 的值为 100 , b 的值为 200\n" );}}fmt.Printf("a 值为 : %d\n", a );fmt.Printf("b 值为 : %d\n", b );}

4. switch 语句

switchif语句一样,switch后面可以带一个可选的简单的初始化语句;

switch后面的表达式也是可选的,如果没有表达式, 则case子句是一个布尔表达式,而不是一个值,此时就相当于多重if else语句;

switch条件表达式的值不像C/C++语言那样必须限制为整数常量, 表达式不需要为常量,甚至不需要为整数,可以是任意支持相等比较运算的类型变量;

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

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

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

switch支持default语句, 当所有的case分支都不符合时, 执行default语句, 并且default语句可以放到任意位置,并不影响switch的判断逻辑;

Go语言中switch语句的语法如下:

switch i:= "y", i {// switch 后面可以带上一个初始化语句case "y", "Y":// 多个 case 值使用逗号隔开Println("Yes")case "n", "N":Println("No")}switch var1 {case value1:...case value2:...default:...}

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

可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3

示例:

package mainimport "fmt"func main() {/* 定义局部变量 */var grade string = "B"var marks int = 90switch marks {case 90:grade = "A"case 80:grade = "B"case 50, 60, 70:grade = "C"default:grade = "D"}switch {// case 后不仅仅只是常量,还可以和 if 一样添加表达式// 注意,这种情况的 switch 后面不再需要跟判断变量。case grade == "A":fmt.Printf("优秀!\n")case grade == "B", grade == "C":fmt.Printf("良好\n")case grade == "D":fmt.Printf("及格\n")case grade == "F":fmt.Printf("不及格\n")default:fmt.Printf("差\n")}fmt.Printf("你的等级是 %s\n", grade)}

输出结果:

优秀!你的等级是 A

5. fallthrough

Go语言中case是一个独立的代码块,执行完毕后不会像C语言那样紧接着执行下一个case,但是为了兼容一些移植代码,依然加入了fallthrough关键字来实现这一功能。

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

package mainimport "fmt"func main() {switch {case false:fmt.Println("1、case 条件语句为 false")fallthroughcase true:fmt.Println("2、case 条件语句为 true")fallthroughcase false:fmt.Println("3、case 条件语句为 false")fallthroughcase true:fmt.Println("4、case 条件语句为 true")case false:fmt.Println("5、case 条件语句为 false")fallthroughdefault:fmt.Println("6、默认 case")}}

输出结果:

2、case 条件语句为 true3、case 条件语句为 false4、case 条件语句为 true

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。