Go基础之流程控制

61 阅读1分钟

前言

流程控制用于设定程序执行的次序,建立程序的逻辑结构。通过与各种条件的配合,一般起到以下三个作用:

  • 选择
  • 循环
  • 跳转

本文会介绍Go的流程控制基本用法和一些需要注意的点。

条件语句

关键字:ifelse else if

if处只能用bool类型的数据作为判断条件,使用别的数据类型编译会不通过,不能像C语言那样使用0和非零分别代表falsetrue

if a<0 {  
    return 0  
}else {  
    return 1  
}

应注意:

  • 条件判断处无括号()
  • 无论语句体内有几条语句{}必须存在,并且{必须与ifelse同一行

选择语句

关键字:switchcaseselect(讲到通道channel时介绍)

Go语言不需要break来退出一个case,相反,只有使用fallthrough才会继续执行下一个case

switch v {  
    case 3:  
        fmt.Println("3")  
        fallthrough  
    case 4:  
        fmt.Println("4")  
    case 5:  
        fmt.Println("5")  
    default:  
        fmt.Println("default")
}

同时,也可以不设定switch后的条件表达式,这种情况下,整个switch结构与if...else...发挥的作用等同

switch {  
    case v == 3:  
        fmt.Println("v==3")  
    case v == 5:  
        fmt.Println("v==5")  
    default:  
        fmt.Println("default")  
}

注意:

  • {必须与switch处于同一行
  • switch处的表达式可以是常量、整数、浮点数、字符串

循环语句

关键字:forrange (讲到数组、切片时介绍)

Go提供和Java一样关键字continuebreak,分别实现进入下一次循环,和中断循环

for i := 0; i < 9; i++ {  
    if i == 5 {  
        continue  
    }  
    if i == 8 {  
        break  
    }  
    fmt.Println(i)  
  
}  

Go只支持for循环,不支持whiledo-while循环,不过可以使用for循环实现类似的功能。

sum := 0  
for {  
    sum++  
    if sum > 15 {  
        break  
    }  
}

需注意:

  • {必须与for处于同一行
  • Go的for循环支持在循环条件中定义和初始化变量,但是不支持以,为间隔的多个赋值语句,必须使用平行赋值的方法来初始化多个变量,如:
for i, j := 0, 6; i < j; i++ {  
...
}
  • 如果有多重循环,Go可以使用break选择中断哪一层循环 如:
loop:  
    for i := 0; i < 5; i++ {  
        for j := 0; j < 5; j++ {  
            if j == 2 {  
                break loop  
            }  
        }  
    }

跳转语句

关键字:goto goto语句的语义非常简单,就是跳转到本函数内的某个标签

for i := 0; i < 10; i++ {  
here:  
    fmt.Println(i)  
    if i < 6 {  
        i += 2  
        goto here  
    }  
}
/*
结果:
0 2 4 6 7 8 9 
*/