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

Golang程序的流程控制

GoLang的流程控制

Golang basic_leaming3 流程控制

Golang basic_leaming3 流程控制

Golang:代码执行流程控制

Golang:代码执行流程控制