go语言中的流程控制语句
qingheluo2021-09-02清河洛267
if语句if 布尔表达式 {
//代码块
}else if 布尔表达式 {
//代码块
}else{
//代码块
}
可以将变量初始化和变量逻辑运算写到一起
if val,err := func_name() ; err==nil{}
表示执行func_name()并将返回值赋值给val和err变量,然后判断err是否等于nil
switch语句go语言中每个case分支不需要添加break,当然了,可以手动添加break来强制终止switch var1 {
case val1:
...
case val2,val3,val4:
...
if语句
if 布尔表达式 { //代码块 }else if 布尔表达式 { //代码块 }else{ //代码块 } 可以将变量初始化和变量逻辑运算写到一起 if val,err := func_name() ; err==nil{} 表示执行func_name()并将返回值赋值给val和err变量,然后判断err是否等于nil
switch语句
go语言中每个case分支不需要添加break,当然了,可以手动添加break来强制终止
switch var1 { case val1: ... case val2,val3,val4: ... default: ... } var1和val1、val2、val3、val4可以是任何类型,但必须是相同的类型 可以同时有多个可能符合条件的值,使用逗号分割 只要有一个值和var1相同即可执行该分支
witch语句还可以被用于type-switch来判断某个变量类型
var a = "hello" switch i := a.(type){ case nil: fmt.Printf("a的类型是%T",i) case string: fmt.Printf("a的类型是string") ... default: fmt.Printf("未知类型") }
fallthrough语句
swicth语句默认只会执行一个分支,但是使用fallthrough语句可以强制执行后面的case语句,无论下一条case的表达式结果是否为true
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") case false: fmt.Println("5、case 条件语句为 false") fallthrough default: fmt.Println("6、默认 case") } 执行结果 2、case 条件语句为 true 3、case 条件语句为 false 4、case 条件语句为 true
select循环
select循环的结构和switch循环相似,不同的是select循环仅能用于通道相关操作
select { case 通道操作1: //代码 case 通道操作2: //代码 ... default: //代码 }
select循环会执行所有case分支后面的通道操作语句,执行语句的顺序为随机顺序,而不是代码的书写顺序
如果任意某个通道操作可以进行,就执行该case分支,其他分支被忽略
如果有多个通道操作都可以运行,Select会随机公平地选出一个case分支执行,其他分支被忽略
如果所有分支操作都阻塞,会执行default分支,如果没有default分支,select将阻塞,直到某个通道操作可以进行
for循环语句
常规的for循环语句
for init; condition; post { }
go语言中没有while循环,使用for代替while循环
for condition { } 可以省略condition语句创建一个无限循环:for {}
for循环的range格式可以对slice、map、数组、字符串等进行迭代循环。格式如下:
for key, value := range 变量 { //循环体 } strings := []string{"hello", "world"} for i, s := range strings { fmt.Println(i, s) } 输出内容: 0 hello 1 world
流程控制语句
break语句
用于循环语句中跳出循环,并开始执行循环之后的语句
在多重循环中,可以用标记label标出想break的循环
re: for i := 1; i <= 3; i++ { fmt.Printf("i: %d", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %d", i2) break re } } 如果不适用标记re,那么实际上应该是只推出内层循环,外层循环依然会继续循环下去 使用了标记re,那么就会直接退出标记指定的循环
continue 语句
在多重循环中,可以用标记 label 标出想 continue 的循环
re: for i := 1; i <= 3; i++ { fmt.Printf("i: %d", i) for i2 := 11; i2 <= 13; i2++ { fmt.Printf("i2: %d", i2) continue re } } 实际的输出 i: 1 i2: 11 i: 2 i2: 11 i: 3 i2: 11
goto 语句
Go语言的goto语句可以无条件地转移到过程中指定的行
goto语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能
但是,在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。
goto语句的格式
goto label; .. . label: statement; LOOP: for a < 20 { if a == 15 { a++ goto LOOP } fmt.Printf("a的值为 : %d", a) a++ } 以上代码当a为15时,a自增1后直接回到循环的开始语句LOOP处,所以不会打印15的值