8-流程控制语句

88 阅读1分钟

流程控制语句

  • 让代码的执行的控制有一个流程化
  • 控制语句的分类
    • 顺序结构
    • 分支结构
    • 循环结构
  • 什么样的逻辑结构都是由上述三种的组合来的

分支结构 a -> b/c/...

  • if分支: ()可省略 {}一定要加
    • 单分支
    • 多分支
    • 双分支
  • switch分支

if分支

package main
import (
    "fmt"
)

func main() {
    // 单分支
    var count int = 20
    if count < 30 {
        fmt.Println("if单分支")
    }
    if sum := 10; sum < 30 {// sum是单独的作用域
        fmt.Println("可声明变量的if单分支")
    }

    // 双分支
    if sum := 10; sum > 5 {
        fmt.Println("条件成立的if双分支")
    } else {
        fmt.Println("条件不成立的if双分支")
    }

    // 多分支
    score := 65
    if score >= 90 {
        fmt.Println("A")
    } else if score > 80 {
        fmt.Println("B")
    } else {
        fmt.Println("C")
    }
}	

image.png

switch分支

  • case后的各个值数据类型,必须和switch的表达式数据类型一致
  • case 值1,值2,...
  • 不需要break
  • default语句不是必须的,位置也是随意的
  • switch穿透,利用fallthrough语法可以执行满足条件的case的下一个case,是为了兼容C语言中的case设计的
package main
import (
    "fmt"
)

func main() {
    var score int = 50
    // 判断分数判断等级
    switch score/10 {
        case 10:
            fmt.Println("当前等级为A")
        case 9:
            fmt.Println("当前等级为B")
        case 8:
            fmt.Println("当前等级为C")
            fallthrough// 走到下一个case中去
        case 7, 6:
            fmt.Println("当前等级为D")
        default:
            fmt.Println("当前等级为E")
    }
}	

image.png

for循环

  • 格式如下
for 初始语句;条件表达式;结束语句{
    循环体语句
}
package main
import (
    "fmt"
)

func main() {
    // 基础用法
    var sum int = 0
    for i := 1; i <= 5; i++ {
        sum += i
    }
    fmt.Println(sum)// 15

    // 省略初始和结束语句
    var i = 0
    for i < 5 {
        fmt.Println(i);
        i++
    }

    // 无限循环
    for {
        fmt.Println("123")
    }

    // break 跳出for循环
    for i := 0; i < 5; i++ {
        fmt.Println(i)
        if i == 3 {
            break
        }
    } 

    // continue 跳出本次循环,继续下一次循环
    for i := 0; i < 5; i++ {
        fmt.Println(i)
        if i == 3 {
            continue
        }
    } 
}

for-range循环

  • for range遍历数组、切片、字符串、map 及通道(channel)
  • 规则如下
    • 数组、切片、字符串返回索引和值
    • map返回键和值
    • 通道(channel)只返回通道内的值

后面补充 todo