GoLang的流程控制

Posted weichen-code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GoLang的流程控制相关的知识,希望对你有一定的参考价值。

流程控制

1、三大流程控制

  • 顺序控制
  • 分支控制
  • 循环控制

2、顺序控制

程序从上到下逐行地执行,中间没有任何判断和跳转

3、分支控制

分支控制就是让程序有选择执行。有下面三种形式

  • 单分支
  • 双分支
  • 多分支

3.1、单分支

if 条件表达式 {
    //
}

3.2、双分支

if 条件表达式 {
    //
} else {
    // 
}

3.3、多分支

if 条件表达式 {
    //
} else if 条件表达式2 {
    // 
}
...
else {
    
}

3.4、嵌套分支

if 条件表达式 {
    if 条件表达式2 {
        // 
    }
} else {
    // 
}

4、switch分支

4.1、基本介绍

  1. switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上到下逐一测试,直到匹配为止。
  2. 匹配项后面也不需要再加break

4.2、语法

switch 表达式 {
    
    case 表达式1, 表达式2, ...:
        语句1
        
    case 表达式3, 表达式4, ...:
        语句2
        
    ...
    
    default:
        语句块
}

  1. switch的执行的流程是,先执行表达式,得到值,然后和case的表达式进行比较,如果相等,就匹配到,然后执行对应的case的语句块,然后退出switch控制。
  2. 如果switch的表达式的值没有和任何的case的表达式匹配成功,则执行default的语句块。执行switch的控制。
  3. golang的case后的表达式可以有多个,使用逗号间隔
  4. golang中的case语句块不需要写break,因为默认会有,即在默认情况下,当程序执行完case语句块后,就直接退出该switch控制结构。

4.3、案例 (在switch 中写判断)

func main() {
    a := 10
    switch true {
    case a > 10, a == 10:
        fmt.Println("成功了")
    default:
        fmt.Println("没走到")
    }
    
    
    b := a / 10
    switch b {
    case 2, 3, 4, 5, 6, 7, 8, 9:
        fmt.Println("没走到")
    default:
        fmt.Println("成功了")
    }
}

4.4、注意事项

  1. case/switch后是一个表达式(即:常量值变量、一个有返回值的函数等都可以)
  2. case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致
  3. case后面可以带多个表达式,使用逗号间隔
  4. case后面的表达式如果是常量值(字面量),则要求不能重复
  5. case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default
  6. default语句不是必须的
  7. switch后也可以不带表达式,类似if--else分支来使用
a := 10;
switch {
case a > 10, a == 10:
    fmt.Println("成功了")
default:
    fmt.Println("没走到")
}
  1. switch后也可以直接声明/定义一个变量,分号结束,不推荐
// 不推荐写法
switch a := 10; {
case a > 10, a == 10:
    fmt.Println("成功了")
default:
    fmt.Println("没走到")
}
  1. switch穿透-fallthrough,如果在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透
a := 10
switch true {
case a > 10, a == 10:
    fmt.Println("成功了")
    fallthrough
default:
    fmt.Println("没走到")
}

5、for循环控制

5.1、语法格式

for 循环变量初始化; 循环条件; 循环变量迭代 {
    循环操作(语句)
}

5.2、注意事项

  1. 循环条件是返回一个布尔值的表达式

  2. 变体写法

    for 循环判断条件 {
        //
    }
    
    for {
        //通常配合break 使用
    }
  3. for-range 方式

    str := "abc"
    for index, val := range str {
        //
    }
  4. 传统的对字符串的遍历是按照字节来遍历,而一个汉字在utf8编码是对应3个字节

var str string = "hello,world 上海"
str2 := []rune(str) // 将str转换为[]rune
for i := 0, i < len(str2); i++ {
    // 
}

// for-range 是按照字符方式遍历的,但是下标是字节数
var str string = "hello,world 上海"
for index, val := range str {
    fmt.Printf("index=%d, val=%c 
“, index, val)
}

5.3、break

5.4、continue

5.4、goto,return

以上是关于GoLang的流程控制的主要内容,如果未能解决你的问题,请参考以下文章

Golang-程序流程控制 ifswitch

Golang入门到项目实战 | golang流程控制关键字goto

golang学习笔记2——容器和流程控制

golang goroutine例子[golang并发代码片段]

Golang basic_leaming3 流程控制

Golang basic_leaming3 流程控制