[golang note] 流程控制

流程控制


• 流程控制语句作用

       ▪ 选择:根据条件跳转到不同的执行序列。

       ▪ 循环:根据条件反复执行某个序列。

       ▪ 跳转:据条件返回到某执行序列。

• 流程控制语句类型

       ▪ 条件语句:关键字为if、else和else if。

       ▪ 选择语句:关键字为switch、case和select。

       ▪ 循环语句:关键字为for和range。

       ▪ 跳转语句:关键字为goto。

条件语句


• 语法如下

// 1
if
condition { ... }
// 2
if condition { ... } else { ... }
// 3
if condition { ... } else if condition { ... }
// 4
if condition { ... } else if condition { ... } else { ... }

• 注意点

       ▪ 条件语句不需要使用括号()将条件包含起来。

       ▪ 条件语句无论语句体内有几条语句,花括号{}都必须存在。

       ▪ 条件语句的左花括号{必须与ifelse同处一行,否则编译器给出错误:syntax error: missing { after if clause。

       ▪ 条件语句的else必须和上一个语句体结束的右花括号}同处一行,否则编译器给出错误:syntax error: unexpected else, expecting }。

       ▪ 条件语句在if之后可以添加变量初始化语句,但需要使用分号;间隔。

if a := 1; a >= 1 {
    fmt.Println("OK")
}

选择语句


• 语法如下

switch condition {
case v0:
    ...
case v1:
    ...
case v2:
    ...
case v3:
    ...
case v4, v5, v6:
    ...
default:
    ...
}

• 注意点

       ▪ 选择语句中,左花括号{必须与switch同处一行。

       ▪ 选择语句中,case后可以使用常量,还可以使用变量。

package main

import "fmt"

func main() {
    condition := 0
    caseValue := 0

    switch condition {
    case caseValue:
        fmt.Printf("0")
    case 1:
        fmt.Printf("1")
    default:
        fmt.Printf("Default")
    }
}

       ▪ 选择语句中,单个case后可以出现多个结果选项。

       ▪ 选择语句中,不需要用break来明确退出一个case

       ▪ 选择语句中,只有在case中明确添加fallthrough关键字,才会继续执行下一个case

package main

import "fmt"

func main() {
    condition := 1

    switch condition {
    case 0:
        fmt.Printf("0")
    case 1:
        fmt.Printf("1")
        fallthrough
    default:
        fmt.Printf("Default")
    }
}

       ▪ 选择语句中,可不设定switch后的条件表达式,在此种情况下整个switch结构与if...else...的逻辑等同。

package main

import "fmt"

func main() {
    num := 1

    switch {
    case 0 <= num && num <= 3:
        fmt.Printf("0-3")
    case 4 <= num && num <= 6:
        fmt.Printf("4-6")
    case 7 <= num && num <= 9:
        fmt.Printf("7-9")
    }
}

跳转语句


• 语法如下

goto label

• 注意点

       ▪ 选择语句的语义非常简单,就是跳转到本函数内的某个标签处执行。

package main

import "fmt"

func main() {
    i := 0
    for {
        i++
        if i >= 10 {
            goto finish
        }
    }

finish:
    fmt.Println("Finish")
}

循环语句


• 语法如下

// 普通循环
for i := 0; i < N; i++ {
    ...
}

// 数组循环
for i, v := range array {
    ...
}

// 无限循环
for {
    ...
}

• 注意点

       ▪ 循环语句只支持for结构,不支持whiledo-while结构。

       ▪ 循环语句左花括号{必须与for处于同一行。

       ▪ 循环语句不支持以逗号为间隔的多赋值语句,支持使用多元赋值的方式来初始化多个变量。

package main

import "fmt"

func main() {
    array := []int{1, 2, 3, 4, 5, 6}
    for i, j := 0, len(array)-1; i < j; i, j = i+1, j-1 {
        array[i], array[j] = array[j], array[i]
    }
    fmt.Println(array)
}

       ▪ 循环语句支持continuebreak来控制循环,但提供了一个更高级的break,可以选择中断哪一层循环。

package main

import "fmt"

func main() {
JLoop1: // 标记循环1,此处不能有非循环代码,break label会跳出循环1
    for j := 0; j < 5; j++ {
    JLoop2: // 标记循环2,此处不能有非循环代码,break label会跳出循环2
        for i := 0; i < 10; i++ {
            if j < 3 {
                break JLoop2 // 跳出循环2
            }

            if i > 5 {
                break JLoop1 // 跳出循环1
            }
            fmt.Println(j, i)
        }
    }
}
原文地址:https://www.cnblogs.com/heartchord/p/5206712.html