Golang:代码执行流程控制
Posted 保暖大裤衩LeoLee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang:代码执行流程控制相关的知识,希望对你有一定的参考价值。
分支控制
if-else
基本语法:
var age int8
age = 18
//if的语法可以省略
if age > 18 {
fmt.Println("成年人")
} else if age == 18 {
fmt.Println("刚刚成年")
} else {
fmt.Println("未成年")
}
在条件判断语句中声明变量:
if age2 := 20; age2 > 18 {
fmt.Println("成年人")
}
switch
- case后的表达式可以是多个,用逗号分开
- 表达式可以是常量、变量、或者是一个有返回值的函数都可以,甚至可以是一个运算表达式。只要返回一个结果即可。
- case的代码块最后不需要显式的写上break,默认会有break关键字
基本语法:
week := 5
switch week + 1 {
case 1:
fmt.Println("一")
case 1 - 1:
fmt.Println("零")
case 2:
fmt.Println("二")
case 3:
fmt.Println("三")
case 4, 5:
fmt.Println("四或者五")
default:
fmt.Println("???")
}
Golang代码格式化后,case缩进到与switch一列,怪怪的。
switch后可以不写表达式,当作if-else使用
switch {
case a == 1:
fmt.Println("aaa")
case b == 18:
fmt.Printf("bbb")
default:
fmt.Println("相当于else")
}
switch后可以直接声明一个变量,分号结束
这样做没有什么意义的
switch c := 1; {
case c == 1:
fmt.Println("cccc")
default:
fmt.Println("这是什么鬼语法")
}
fallthrough穿透
当前case执行完成后,强制执行下一个case中的代码块,甚至是default中
d := 1
switch d {
case 1:
fmt.Println(1)
fallthrough
case 2:
fmt.Println(2)
fallthrough
case 3:
fmt.Println(3)
fallthrough
default:
fmt.Println("fallthrough穿透")
}
需要注意:
switch 'a' {
case 'a' :
fmt.Println("编译通过")
}
-------------------------------------
func get(b byte) byte {
return b + 1
}
var bbb byte = 'a'
switch get(bbb) + 1 {
case 'a':
fmt.Println("编译通过")
}
循环控制
基本语法:
for i := 0; i < 10; i++ {
fmt.Printf("第%d次循环\\n", i + 1)
}
-------------------------------------
i := 1
for i <= 10 {
fmt.Printf("第%d次循环\\n", i)
i++
}
-------------------------------------
//死循环,等价于 for ;; {},通常需要break跳出
for {
}
-------------------------------------
//for range,增强型for循环,与java中类似
str := "Hello world"
for i := 0; i < len(str); i++ {
fmt.Printf("str[%d]=%q\\n", i, str[i])
}
//for range方式
for idx, value := range str {
fmt.Printf("str[%d]=%q\\n", idx, value)
}
break
count := 1
var num int
for {
//设置随机种子
rand.Seed(time.Now().UnixNano())
num = rand.Intn(100) + 1
if num == 99 {
fmt.Println("随机到了99")
break
}
count++
}
需要注意的是:当嵌套for循环时,break默认只跳出当前所在循环体对应的for循环。
break跳出指定label所对应的循环体
label1:
for i := 0; i < 5; i++ {
for j := 0; j < 10; j++ {
if j == 3 {
//此时跳出label1对应的最外层for循环
break label1
}
fmt.Println("j=", j)
}
}
continue
//continue用于结束本次循环,下一次循环还会继续执行
for i := 0; i < 10; i++ {
if i == 4 {
fmt.Println("i=4的循环结束")
continue
}
fmt.Println("i=", i)
}
continue结束当前循环,到指定here标签处开始下一次循环
here1:
for i := 0; i < 2; i++ {
for j := 0; j < 4; j++ {
if j == 2 {
continue here1
}
fmt.Println("i=%d,j=%d", i, j)
}
}
while和do while
Golang没有whtile和do while,用for代替,break跳出。
goto
- Golang的goto可以无条件的将执行位置转移到指定行
- goto通常与条件语句配合使用,可用来实现条件转移,跳出循环体等功能
condition := 1
fmt.Println("step1")
if condition == 1 {
goto point1
}
fmt.Println("step2")
point2:
fmt.Println("step3")
condition = 4
point1:
fmt.Println("step4")
if condition != 4 {
condition = 3
}
fmt.Println("step5")
if condition == 3 {
goto point2
}
fmt.Println("step6")
以上是关于Golang:代码执行流程控制的主要内容,如果未能解决你的问题,请参考以下文章