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:代码执行流程控制的主要内容,如果未能解决你的问题,请参考以下文章