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

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

    if else分支结构

      if条件判断基本写法

    if 表达式1 {
        分支1
    } else if 表达式2 {
        分支2
    } else{
        分支3
    }

      其中当表达式1的结果为true的时候就会执行分之1否则就判断表达式2,如果满足就执行分支2,要是都不满足就执行分支3,if判断中的else if和else都是可选的,可以根据实际情况来进行选择

      Go语言规定与if匹配的左括号{必须与if表达式放在同一行中,{放在其它位置都会触发编译错误的现象。同理,与else匹配的{也必须放在和else同一行中。

      

      if条件判断的特殊写法

        if条件判断还有一种特殊的写法,可以在if表达式之前添加一个执行语句,再根据变量的值进行判断

    for循环结构:

    for 初始语句;条件表达式;结束语句{
        循环体语句
    }

      条件表达式返回true的时候循环体不停进行循环,直到条件表达式返回的是false时自动退出循环

      其中for循环的初始语句是可以被忽略的,但是后面的那个分号还是要加上的。

      for循环的初始语句和结束语句都是可以省略的,这种写法类似python中的while循环,while后面添加一个条件表达式,满足条件表达式时就会持续循环,否则就会结束循环

    func forDemo3() {
        i := 0
        for i < 10 {
            fmt.Println(i)
            i++
        }
    }

    无限循环:

    for {
        循环体语句
    }

      for循环可以通过break、goto、return、panic语句来强制退出当前循环

    for range(键值循环)

      Go语言中可以使用for range遍历数组、切片、字符串、map以及通道channel。通过for range遍历的返回值有以下几点规律:

        1、数组、切片、字符串返回索引和值

        2、map返回键和值

        3、通道channel只返回通道内的值

    swith case

      有些时候你需要写很多的if-else来实现一些逻辑处理,这个时候你的代码看上去很丑也很长,而且最大的问题就是不方便后期的维护,这个时候switch就能很好的解决这个问题

    func switchDemo1() {
        finger := 3
        switch finger {
        case 1:
            fmt.Println("大拇指")
        case 2:
            fmt.Println("食指")
        case 3:
            fmt.Println("中指")
        case 4:
            fmt.Println("无名指")
        case 5:
            fmt.Println("小拇指")
        default:
            fmt.Println("无效的输入!")
        }
    }

      Go语言规定每个swith只能有一个default分支

      一个分支可以有多个值,多个case值中间使用英文逗号进行隔断

    func testSwitch3() {
        switch n := 7; n {
        case 1, 3, 5, 7, 9:
            fmt.Println("奇数")
        case 2, 4, 6, 8:
            fmt.Println("偶数")
        default:
            fmt.Println(n)
        }
    }

      分支还可以使用表达式,这时候switch语句后面不需要在跟判断变量。

    func switchDemo4() {
        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设计的

    func switchDemo5() {
        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("...")
        }
    }

    got跳转到指定的标签

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

    func gotoDemo1() {
        var breakFlag bool
        for i := 0; i < 10; i++ {
            for j := 0; j < 10; j++ {
                if j == 2 {
                    // 设置退出标签
                    breakFlag = true
                    break
                }
                fmt.Printf("%v-%v
    ", i, j)
            }
            // 外层for循环判断
            if breakFlag {
                break
            }
        }
    }

      这里面要是使用goto语句能够简化代码

    func gotoDemo2() {
        for i := 0; i < 10; i++ {
            for j := 0; j < 10; j++ {
                if j == 2 {
                    // 设置退出标签
                    goto breakTag
                }
                fmt.Printf("%v-%v
    ", i, j)
            }
        }
        return
        // 标签
    breakTag:
        fmt.Println("结束for循环")
    }

    break跳出循环:

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

      break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的for、switch、和select的代码块上

    func breakDemo1() {
    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("...")
    }

    continue继续下次循环:

      continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用

      在continue语句后添加标签的时候,表示开始标签对应的循环

    func continueDemo() {
    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)
            }
        }
    }
  • 相关阅读:
    C#中Socket多线程编程实例
    VBA之Range对象在Excel单元格赋值示例
    c# 怎么关闭Excel
    C#结构体定义的详解
    asp.net C#调用mencoder处理视频的方法
    Win7系统找回“显示桌面”按钮,Win7系统将显示桌面添加到开始按钮旁
    使用 Visual Studio .NET 客户端执行自动化功能后不退出 Office 应用程序
    c#操作excel后关闭excel.exe的方法
    asp文件的连接11种方法
    Excel对象模型的一些使用心得(C#)
  • 原文地址:https://www.cnblogs.com/tulintao/p/11801586.html
Copyright © 2011-2022 走看看