zoukankan      html  css  js  c++  java
  • GO流程控制

    GO流程控制

     

    Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,不常用,属于扩展类的流程控制。

    if else

    if基本写法

    复制代码
    if 表达式1 {
    分支1
    } else if 表达式2 {
    分支2
    } else{
    分支3
    }
    复制代码

    Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。 同理,与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。

    if特殊写法
    在 if 表达式之前添加一个执行语句,再根据变量值进行判断。
    例子:

    package main

    import "fmt"

    func main() {
    age := 19
    if age > 18 {
    fmt.Println("哈哈")
    } else if age < 18 {
    fmt.Println("Warning..")
    } else {
    fmt.Println("成年")
    }

    if age2 := 20; age2 > 18 {
    fmt.Println("成年")
    }
    }

    for

    基本格式:
    for 初始语句;条件表达式;结束语句{
    循环体语句
    }
    条件表达式返回true时循环体不停地进行循环,直到条件表达式返回false时自动退出循环。

    for range(键值循环)

    Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律: 1. 数组、切片、字符串返回索引和值。 2. map返回键和值 3. 通道(channel)只返回通道内的值。
    示例:

    package main

    import "fmt"

    func main() {
    for i := 1; i < 3; i++ {
    fmt.Println(i)
    }
    //for循环的初始语句可以被忽略,但是初始语句后的分号必须要写
    i1 := 1
    for ; i1 < 3; i1++ {
    fmt.Println(i1)
    }
    //for循环的初始语句和结束语句都可以省略,这种写法类似于其他编程语言中的while
    i2 := 1
    for i2 < 3 {
    fmt.Println(i2)
    }
    //for range
    s1 := "ares菜鸡"
    for i3 := 0; i3 < len(s1); i3++ {
    fmt.Printf("%c ", s1[i3])
    }
    for _, v := range s1 {
    fmt.Printf("%c ", v)
    }
    }

    复制代码
    package main
    
    import "fmt"
    
    func main() {
        for i := 1; i < 3; i++ {
            fmt.Println(i)
        }
        //for循环的初始语句可以被忽略,但是初始语句后的分号必须要写
        i1 := 1
        for ; i1 < 3; i1++ {
            fmt.Println(i1)
        }
        //for循环的初始语句和结束语句都可以省略,这种写法类似于其他编程语言中的while
        i2 := 1
        for i2 < 3 {
            fmt.Println(i2)
        }
        //for range
        s1 := "ares菜鸡"
        for i3 := 0; i3 < len(s1); i3++ {
            fmt.Printf("%c
    ", s1[i3])
        }
        for _, v := range s1 {
            fmt.Printf("%c
    ", v)
        }
    }
    复制代码

    当字符串中存在汉字时,索引循环取出来为类乱码, 一个汉字的长度是3,两个汉字是6位,索引取是每一位,range时候是按照三位三位遍历的,所以使用range循环可以正常显示汉字。

    switch case

    使用switch语句可方便地对大量的值进行条件判断。Go语言规定每个switch只能有一个default分支。

    示例:

    package main
    import "fmt"
    func main() {
    //输出食指
    finger := 2
    switch finger {
    case 1:
    fmt.Println("大拇指")
    case 2:
    fmt.Println("食指")
    default:
    fmt.Println("无效")
    }
    //一个分支可以有多个值,多个case值中间使用英文逗号分隔
    //输出奇数
    switch n:=7;n{
    case 1, 3, 5, 7, 9:
    fmt.Println("奇数")
    case 2, 4, 6, 8:
    fmt.Println("偶数")
    default:
    fmt.Println(n)
    }
    //分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量
    //输出好好工作吧
    age := 30
    switch {
    case age < 25:
    fmt.Println("好好学习吧")
    case age > 25 && age < 35:
    fmt.Println("好好工作吧")
    case age > 60:
    fmt.Println("好好享受吧")
    default:
    fmt.Println("活着真好")
    }
    //fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的
    //输出 a b
    s := "a"
    switch {
    case s == "a":
    fmt.Println("a")
    fallthrough
    case s == "b":
    fmt.Println("b")
    case s == "c":
    fmt.Println("c")
    default:
    fmt.Println("...")
    }
    }

    复制代码
    package main
    import "fmt"
    func main()  {
        //输出食指
        finger := 2
        switch finger {
        case 1:
            fmt.Println("大拇指")
        case 2:
            fmt.Println("食指")
        default:
            fmt.Println("无效")
        }
        //一个分支可以有多个值,多个case值中间使用英文逗号分隔
        //输出奇数
        switch n:=7;n{
        case 1, 3, 5, 7, 9:
            fmt.Println("奇数")
        case 2, 4, 6, 8:
            fmt.Println("偶数")
        default:
            fmt.Println(n)
        }
        //分支还可以使用表达式,这时候switch语句后面不需要再跟判断变量
        //输出好好工作吧
        age := 30
        switch {
        case age < 25:
            fmt.Println("好好学习吧")
        case age > 25 && age < 35:
            fmt.Println("好好工作吧")
        case age > 60:
            fmt.Println("好好享受吧")
        default:
            fmt.Println("活着真好")
        }
        //fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的
        //输出 a b
        s := "a"
        switch {
        case s == "a":
            fmt.Println("a")
            fallthrough
        case s == "b":
            fmt.Println("b")
        case s == "c":
            fmt.Println("c")
        default:
            fmt.Println("...")
        }
    }
    复制代码

    键盘输入判断

    func main() {
    fmt.Println("请输入数值:")
    var num int
    fmt.Scanln(&num)
    switch {
    case num>=18:
    fmt.Println("成年",num)
    case num <18:
    fmt.Println("未成年",num)
    default:
    fmt.Println("不知道!")
    }
    }

    复制代码
    func main()  {
        fmt.Println("请输入数值:")
        var num int
        fmt.Scanln(&num)
        switch  {
        case num>=18:
            fmt.Println("成年",num)
        case num <18:
            fmt.Println("未成年",num)
        default:
            fmt.Println("不知道!")
        }
    }
    复制代码

    goto(跳转到指定标签)

    goto语句通过标签进行代码间的无条件跳转。goto语句可以在快速跳出循环、避免重复退出上有一定的帮助。Go语言中使用goto语句能简化一些代码的实现过程。

    package main

    import "fmt"

    func main() {
    //双层循环嵌套退出
    var Flag bool
    for i := 0; i < 3; i++ {
    for j := 0; j < 2; j++ {
    if i == 2 {
    //设置退出标签
    Flag = true
    break
    }
    fmt.Println(i, j)
    }
    //外层for循环判断
    if Flag {
    break
    }
    }

    //goto实现
    for i := 0; i < 3; i++ {
    for j := 0; j < 2; j++ {
    if i == 2 {
    goto Flagbreak
    }
    fmt.Println(i, j)
    }
    }
    //return
    Flagbreak:  //goto语句通过标签进行代码间的无条件跳转,而 break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上。
    fmt.Println("END")
    }

    复制代码
    package main
    
    import "fmt"
    
    func main() {
        //双层循环嵌套退出
        var Flag bool
        for i := 0; i < 3; i++ {
            for j := 0; j < 2; j++ {
                if i == 2 {
                    //设置退出标签
                    Flag = true
                    break
                }
                fmt.Println(i, j)
            }
            //外层for循环判断
            if Flag {
                break
            }
        }
    
        //goto实现
        for i := 0; i < 3; i++ {
            for j := 0; j < 2; j++ {
                if i == 2 {
                    goto Flagbreak
                }
                fmt.Println(i, j)
            }
        }
        //return
    Flagbreak:
        fmt.Println("END")
    }
    复制代码

    break跳出循环

    break语句可以结束for、switch和select的代码块。

    多层循环嵌套,默认结束里层循环
    break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch和 select的代码块上

    continue继续下次循环

    continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用在 continue语句后添加标签时,表示开始标签对应的循环。

    示例:

    package main

    import "fmt"

    func main() {
    BREAKDEMO1:    //标签要求必须定义在对应的for、switch和 select的代码块上。
    for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
    if j == 2 {
    break BREAKDEMO1
    }
    fmt.Printf("%v-%v ", i, j)
    }
    }
    fmt.Println("...")

    forloop1:   //标签要求必须定义在对应的for、switch和 select的代码块上。
    for i := 0; i < 5; i++ {
    // forloop2:
    for j := 0; j < 5; j++ {
    if i == 2 && j == 2 {
    continue forloop1
    }
    fmt.Printf("%v-%v ", i, j)
    }
    }
    }

    复制代码
    package main
    
    import "fmt"
    
    func main() {
    BREAKDEMO1:
        for i := 0; i < 10; i++ {
            for j := 0; j < 10; j++ {
                if j == 2 {
                    break BREAKDEMO1
                }
                fmt.Printf("%v-%v
    ", i, j)
            }
        }
        fmt.Println("...")
    
        forloop1:
        for i := 0; i < 5; i++ {
            // forloop2:
            for j := 0; j < 5; j++ {
                if i == 2 && j == 2 {
                    continue forloop1
                }
                fmt.Printf("%v-%v
    ", i, j)
            }
        }
    }
    复制代码
  • 相关阅读:
    JDBC的PreparedStatement是什么?
    ArrayList、LinkedList、Vector 的区别。
    final finally finalize区别
    面向对象三大特性
    JDBC访问数据库的基本步骤是什么?
    报表中的地图怎么做?
    报表工具如何实现“点击查看原图”
    玩转报表排名之组内排名
    动态隐藏行
    OUT 了??还没玩转报表超链接
  • 原文地址:https://www.cnblogs.com/show58/p/12613890.html
Copyright © 2011-2022 走看看