Go-流程控制

du-z / 2023-08-23 / 原文

在golang语言中有丰富的流程控制方面的功能。包括条件控制语句、循环语句、跳转语句等

1 if条件控制语句

1.1 语法

if condition {
	statement(s)
} else if condition {
	statement(s)
} else {
	statement(s)
}

//1 其中condition 为一个条件表达式,用于判断真假,结果必须为true或false
//2 如果条件为真则执行condition后面{}中的代码,
//3 如果条件为假则依次执行else if 判断直到第一个为真的condition 出现后,执行其后面{}中的代码,
//4 如果所有的condition都为假,则执行else 后面{}中的代码
//5 如果没有else 块,则条件都为假时不执行任何语句,跳过此if条件语句执行下面的代码

1.2 示例

package main

import "fmt"

func main() {

	if a := 2; a > 3 {
		fmt.Println("1")
	} else if a > 2 {
		fmt.Println("2")
	} else {
		fmt.Println("3")
	}
	fmt.Println("4")
}
------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
3
4
PS C:\Goproject\src\gocode\project01\main>

2 switch 语句

2.1 语法

switch expression {
	case value1,value2:
		statement(s)
	case value3,value4:
		satatement(s)
	...
	default:
		statement(s)
}

//1 expression是一个表达式,用于匹配case子句中的常量或变量。
//2 如果匹配成功,则执行对应的代码
//3 否则跳过该语句,匹配下一个case子句
//4 如果所有的case子句都未匹配成功,则执行default 后面的代码
//5 如果没有default子句,且都没有匹配,则不执行任何语句,跳过此switch条件语句

2.2 示例

package main

import "fmt"

func main() {
	var grade int = 43
	switch grade / 10 {
	case 10:
		fmt.Println("A")
	case 9, 8:
		fmt.Println("B")
	case 7, 6:
		fmt.Println("C")
	default:
		fmt.Println("D")
	}
}

-------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
D
PS C:\Goproject\src\gocode\project01\main> 

2.3 switch使用注意

  1. expresstion 是一个表达式(常量值、变量、一个有返回值的函数都可以)
  2. case后的value值不能重复
  3. case后的各个值的数据类型,必须和switch的表达式返回的数据类型一致
  4. case后面可以带多个值,使用英文逗号分隔
  5. default子句不是必须的,位置也是随意的
  6. switch穿透,利用fallthrough关键字,如果在case语句块后面增加fallthrough,则会继续执行下一个case的代码,也叫switch穿透

switch穿透示例

package main

import "fmt"

func main() {
	var grade int = 83
	switch grade / 10 {
	case 10:
		fmt.Println("A")
	case 9, 8:
		fmt.Println("B")
		fallthrough
	case 7, 6:
		fmt.Println("C")
	default:
		fmt.Println("D")

	}
}
-----------输出
PS C:\Goproject\src\gocode\project01\main> go run .\test.go
B
C
PS C:\Goproject\src\gocode\project01\main> 

3