Golang笔记之流程控制

一、条件语句

1.1if

if表达式的结果为true时执行语句块内代码

package main

import "fmt"

func main() {

    var flag bool = true

    if flag {

        fmt.Println("true")

    }

}

 

1.2if-else

if表达式结果为 true,则执行if语句块内代码,否则执行 else语句块内代码

package main

import "fmt"

func main() {

    var flag bool = false

    if flag {

        fmt.Println("true")

    } else {

        fmt.Println("false")

    }

}

 

1.3if-else if-else

当 if表达式结果为 true,则执行 if语句块内代码,否则依次从上到下判断 else if表达式结果,若结果为 true则执行对应语句块内代码并退出 if-else if-else语句,若 if和else if表达式均为 false,则执行 else语句块内代码

package main

import "fmt"

func main() {

    var ret int

    fmt.Print("请输入分数:")

    fmt.Scan(&ret)

    if ret >= 90 {

        fmt.Println("A")

    } else if ret >= 80 {

        fmt.Println("B")

    } else if ret >= 60 {

        fmt.Println("C")

    } else {

        fmt.Println("D")

    }

}

 

1.4、初始化子语句

可以在 if语句中初始化语句块内的局部变量,多个语句之间使用逗号(;)分隔

package main

import "fmt"

func main() {

    if flag := true; flag {

        fmt.Println("flag",flag)

    }

}

 

二、选择语句

2.1switch-case

swtich语句后面跟接变量,此时选择与变量相同的 case语句块执行并退出,若所有 case均不相同则执行 default语句块,case语句中可包含多个不同的值进行匹配

单值

    input := "yes"

    switch input {

    case "yes":

        fmt.Println("确认")

    case "no":

        fmt.Println("取消")

    default:

        fmt.Println("输入错误")

    }

多值

    input := "yes"

    switch input {

    case "yes","y":

        fmt.Println("确认")

    case "no","n":

        fmt.Println("取消")

    default:

        fmt.Println("输入错误")

    }

 

2.2switch-case 表达式

switch后不跟接变量,此时自上到下选择第一个表达式为 true case语句块执行并退出,若所有 case表达式均为 false,则执行 default语句块

    var ret int

    fmt.Print("请输入分数:")

    fmt.Scan(&ret)

    switch {

    case ret >= 90:

        fmt.Println("A")

    case ret >= 80

        fmt.Println("B")

    case ret >= 60:

        fmt.Println("C")

    default

        fmt.Println("D")

    }

 

2.3初始化子语句

可以在 switch语句中初始化语句块内的局部变量,多个语句之间使用逗号(;)分隔,注意初

始化表达式时后面的逗号(;)不能省略

初始化表达式

    switch ret := 80; {

    case ret >= 90:

        fmt.Println("A")

    case ret >= 80

        fmt.Println("B")

    case ret >= 60:

        fmt.Println("C")

    default

        fmt.Println("D")

    }

初始化值

    switch input := "yes"; input {

    case "y","yes":

        fmt.Println("yes")

    case "n","no":

        fmt.Println("no")

    default:

        fmt.Println("输入错误")

    }

 

2.4、fallthrough

switch-case默认执行 case语句后退出,若需要继续执行下一个 case语句块,可以在 case

语句块中使用 fullthrough进行声明

    var ret int

    fmt.Print("请输入分数:")

    fmt.Scan(&ret)

    switch ret := 80; {

    case ret >= 90:

        fmt.Println("A")

        fallthrough

    case ret >= 80

        fmt.Println("B")

    case ret >= 60:

        fmt.Println("C")

    default

        fmt.Println("D")

    }

 

三、循环语句

3.1for

for语句后有三个子语句分别为:初始化子语句,条件子语句和后置子语句

执行顺序为:

a) 初始化子语句

b) 条件子语句

c) 语句块

d) 后置子语句

e) b->c->d

f) …

g) 直到条件子语句为 false结束循环

    sum := 0

    for i := 0; i <= 100i++ {

        sum += i

    }

    fmt.Println(sum)

 

3.2breakcontinue 语句

break用于跳出循环,当条件满足则结束循环

continue用于跳过循环,当条件满足这跳过本次循环进行后置或条件子语句执行

    for i := 0; i <= 100i++ {

        if i == 60 {

            break

        }

        if i >= 50 {

            fmt.Println(i)

            continue

        }

    }

 

3.3、只有条件子语句的for

    sum := 0

    i := 1

    for i <= 100 {

        sum += i

        i++

    }

    fmt.Println(sum)

 

3.4、死循环

    sum := 0

    i := 1

    for  {

        if i > 100 {

            break

        }

        sum += i

        i++

    }

    fmt.Println(sum)

 

3.5for range 遍历

用于遍历可迭代对象中的每个元素,例如字符串,数组,切片,映射,通道等

针对包含 Unicode字符的字符串遍历是需要使用 for-range,range返回两个元素分别为字

节索引和 rune字符,可通过空白标识符忽略需要接收的变量

    //多维数组for range 遍历

    for ik := range a1 {

        for jv := range k {

            fmt.Printf("一维:%d 二维:%d  值:%d\n"ijv)

        }

    }

 

四、labelgoto

4.1goto跳转label

可以通过 goto语句任意跳转到当前函数指定的 label位置

    sum := 0

    i := 1

    START: //定义START标签

    if i > 100 {

        goto STOP //跳转到STOP标签

    } else {

        sum += i

        i++

        goto START 

    }

    STOP:

    fmt.Println(sum)

 

 

 

4.2breakcontinue跳转label

break和 continue后也可以指定 label用于指定跳出或跳过指定 label同层级的循环

    RESTART:

    for i := 1; i < 10i++ {

        for j :=1; j < 10j++ {

            if j == 3 {

                continue RESTART //跳过外层循环

            }

            if i == 5 {

                break RESTART //跳出外层循环

            }

            fmt.Println(i,j)

        }

    }

 来自于吴科老师《手撕go语言》 马哥go运维开发第四期

猜你喜欢

转载自blog.51cto.com/jiayimeng/2668203