概述
如果我们需要匹配某些情况的时候,比如说给考试分等级,90分以上为A,70分以上为B,60分以下为C,这种情况,我们发现,如果使用if条件语句的话,实现起来是十分复杂的,所以就有了选择语句switch。
Go+的switch相较于Java和、C的switch语句更加灵活方便。
语法
基本语法
Go+的switch无需break
,避免了条件击穿的问题,Go+会自动帮我们匹配到合适的switch
语句,就不再执行下面一行的代码了,具体的语法格式如下:
switch 需要判断的变量{ case 情况A : // 执行的代码 case 情况B : // 执行的代码 case 情况C : // 执行的代码 case 情况D : // 执行的代码 default: // 都不匹配的情况下执行 } 复制代码
写一个小Demo,如果分数90以上分为A,70分以上为B,60分以上为C,60分以下为D。
var marks int = 90 switch { case marks >= 90 : println("A") case marks<90 && marks>=70 : println("B") case marks<70 && marks>=60 : println("C") default: println("D" ); } 复制代码
default case
如果我们写的几种情况都匹配不上的话,Go+会默认帮我们匹配default
的这种情况,需要注意的是Go+的default
不是只能放在最后,而是可以放在任何的位置。
var marks int = 30 switch { case marks >= 90 : println("A") case marks<90 && marks>=70 : println("B") default: println("D" ); case marks<70 && marks>=60 : println("C") } 复制代码
多case的情况
如果我们需要匹配多种情况,比如我们的元音辅音,是没有任何数学上的规律,仅仅只是需要匹配多个值,我们就可以在case上不断加条件,变成多case的情况。
word := "i" switch word { case "a", "e", "i", "o", "u": println("元音") default: println("辅音") } 复制代码
fallthrough
我们前面说过,如果Go+的switch
匹配到了某种情况是不会再去执行下面的语句了,如果我们想要继续执行下面代码的效果就可以使用fallthrough
,需要注意的是fallthrough
会强制执行后面的case
里面的代码,不会去判断case
里面的情况是否是真。
num := 30 switch { case num < 50: println("小于40") fallthrough case num < 70: println("小于70") fallthrough case num < 90: println("小于90") } 复制代码
概述
如果我们想循环执行某个操作,这个时候就需要循环控制结构,也就是for
循环。for
循环的意思是根据循环的判断条件,当条件为真的时候,执行某种操作,直到循环为假的时候才跳出这个循环。
语法
for
循环有三种循环,分别对应不同的写法。
第一种循环
第一种循环时我们最常见的循环,他是支持初始化语句的。语法格式如下:
for 初始化代码; 关系表达式; 赋值表达式 { } 复制代码
他包含了三段代码:
- 初始化代码:这里操作一般为给表达式赋初始值。
- 关系表达式:这里写的是循环控制的条件。
- 赋值表达式:这里写一段赋值表达式,一般是给变量自增或者自减的。
比如我们输出0-10可以这样写:
for i := 0; i <= 10; i++ { println(i) } 复制代码
第二种循环
第二种循环是我们通过关系表达式来控制循环,他的语法格式如下:
for 循环条件 { // 执行的代码块 } 复制代码
i := 0 for i < 3 { println i i++ } 复制代码
他所得到的结果就是输出大于0小于3的数,结果是0、1、2.
第三种循环
第三种循环是无限循环,需要搭配break
来跳出循环,不然会一直无线循环,直到报错。他的语法格式如下:
for { //需要执行的代码 } 复制代码
他等价于这样写:
for ; ; { //需要执行的代码 } 复制代码
如果我们不控制循环的跳出的话,程序会报错的,所以我们一般的写法是:
k := 1 for { if k <= 3 { println k } else { break } k++ }