条件语句
条件语句包括if
和 switch
1. if
语句
if
语句用于根据条件执行代码块。
输出
你可以在if
语句声明变量,该变量的作用域是整个if
语句
运行
2. switch
语句
当有两个以上的条件判断时,使用if 就显得有些繁琐,这种情况switch
语句就排上用场了!
输出
switch
接收一个变量,将这个变量与每个case
做比较,如果相等就执行对应的case
代码块。如果所有的case
都不相等,就会执行默认的default
代码块。和其他语言不同,switch
只执行一个代码块,执行完后就退出switch
语句。
switch
也可以不接收变量,直接在case
做判断,哪个case
为true
就执行对应代码块:
输出
switch
是按照从上到下的顺序执行的,如果有多个case
都为true
则执行第一个为true
的case
。(尽量不要写出这种代码,哈哈)
例如,我把第一个case
改成true
输出
你也可以在switch
语句里声明变量,该变量的作用范围是整个switch
语句
输出
2.1 判断变量类型
switch
常结合类型断言来判断接口类型的变量的底层类型
输出
因为42
默认是int
类型的直面量,即value
的底层是int
类型。
Go 中any
类型是interface{}
空接口的别名,可以存放任何类型,接口会在后边讲。
v := value.(type)
是switch
中特有的类型断言语法,只会在switch
中出现。每个case
代码块中的变量v
的类型就是对应的类型了,很神奇,(看格式化动词%d
, %s
, %t
就能知道v
的类型)。
类型断言
Go 是强类型的语言,常需要进行类型转换。
对于一些底层相同的基本类型,如(整形),我们可以直接转换:
byte
是uint8
的别名,都是整形,能转换成功。
但如果是接口类型,就得使用类型断言, 语法为v, ok := val.(type)
输出
如果转换不成功, ok
为false
时,num2
就为对应类型的零值。int
的零值是0
。
你也可以缺省ok
:
num1
的底层是string
,不是int
,断言会失败,缺省ok
程序会panic
运行,输出
建议保留ok
, 我们自己决定转换失败的逻辑。