zoukankan      html  css  js  c++  java
  • [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)
            }
        }
    }
  • 相关阅读:
    document.form.action一个页面多个action,表单分向提交
    jdk多个版本切换
    (已解决)No result defined for action and result input
    struts2中action中的void方法
    时间格式yy-MM-dd HH:mm:ss
    Spring在Action中不用注入实体类
    css背景色的线性渐变
    ElasticSearch入门
    Git命令进阶
    websocket入门代码
  • 原文地址:https://www.cnblogs.com/heartchord/p/5206712.html
Copyright © 2011-2022 走看看