Go-流程控制

在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 for循环语句

3.1 语法

3.1.1 形式一

for init ; condition ; post {
	statement(s)
}

//1 init 用于初始化循环变量,从何时开始循环 
//2 condition 用于条件判断循环是否继续
//3 post 用于控制循环变量的操作,首次循环不操作,然后先操作再判断
//4 statement(s) 循环体代码

3.1.2 形式二--类似于while

for  condition  {
	statement(s)
}


//1 condition 用于条件判断循环是否继续,满足条件即执行循环体
//2 statement(s) 循环体代码

3.2 示例

package main

import "fmt"

func main() {
	var x int = 5
	var y int = 0
	for i := 0; i < x; i++ {
		fmt.Println(i)
	}
	fmt.Println("------------------")

	i := 0

	for i < x {
		fmt.Println(i)
		i++
	}

	fmt.Println("------------------")
	for y < x {
		y++
		fmt.Println(y)
	}
}

--------------------------输出

PS C:\Goproject\src\gocode\project01\main> go run .\test.go
0
1
2
3
4
------------------
0
1
2
3
4
------------------
1
2
3
4
5
PS C:\Goproject\src\gocode\project01\main> 

3.3 range语句

range语句用于遍历数组、切片、通道或映射元素

3.3.1 语法

for key,value := range Map {
	statement(key)
	statement(value)
}

//1 其中的key和value分别表示Map元素中的键和值

3.3.2 示例

package main

import "fmt"

func main() {
	nums := []int{2, 3, 4}
	sum := 0
	for _, num := range nums {
		sum += num
	}

	fmt.Println("sum:", sum)

	for i, num := range nums {
		if num == 3 {
			fmt.Println("index:", i)
		}
	}

	kvs := map[string]string{"name": "du-z", "age": "25"}
	for k, v := range kvs {
		fmt.Printf("%s -> %s", k, v)
		fmt.Printf(" ")
	}

}

---------------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
sum: 9
index: 1
name -> du-z age -> 25
PS C:\Goproject\src\gocode\project01\main>

4 跳转语句

4.1 break语句

break语句用于中断循环体

4.2 continue语句

continue语句用于中断本次迭代

4.3 示例

package main

import "fmt"

func main() {
	for i := 0; i < 5; i++ {
		if i == 3 {
			break
		}
		fmt.Printf("%d ", i)
	}
	fmt.Println()
	for i := 0; i < 5; i++ {
		if i == 3 {
			continue
		}
		fmt.Printf("%d ", i)
	}
}

-------------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
0 1 2 
0 1 2 4
PS C:\Goproject\src\gocode\project01\main>

5 goto语句无条件流程控制语句

Golang中的goto语句是一种强大的无条件控制流程语句,它允许程序跳转到指定的标签位置并执行语句

5.1 语法

goto labelname

labelname:
	statement(s)
	
//1 labelname 是一个标识符
//2 statement(s) 是要执行的语句

5.2 goto语句使用注意事项

  1. 避免滥用--由于goto语句可以使程序跳转到任意代码部分,滥用会导致程序变得难以理解和维护,应该尽量用结构化语句
  2. 避免无线循环--如果标签的位置没有改变循环条件,那么程序就会无线循环,且很难发现和修复

5.3 示例

package main

import "fmt"

func main() {
	i := 0
loop:
	if i < 5 {
		fmt.Printf("%d", i)
		i++
		goto loop
	}

}

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

6 经典例子---打印九九乘法表

package main

import "fmt"

func main() {
	num := 9
	for i := 1; i <= num; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%v * %v = %v \t", j, i, j*i)
		}
		fmt.Println()
	}

}

----------------输出
PS C:\Goproject\src\gocode\project01\main> go run .\for.go
1 * 1 = 1
1 * 2 = 2       2 * 2 = 4
1 * 3 = 3       2 * 3 = 6       3 * 3 = 9
1 * 4 = 4       2 * 4 = 8       3 * 4 = 12      4 * 4 = 16
1 * 5 = 5       2 * 5 = 10      3 * 5 = 15      4 * 5 = 20      5 * 5 = 25
1 * 6 = 6       2 * 6 = 12      3 * 6 = 18      4 * 6 = 24      5 * 6 = 30      6 * 6 = 36
1 * 7 = 7       2 * 7 = 14      3 * 7 = 21      4 * 7 = 28      5 * 7 = 35      6 * 7 = 42      7 * 7 = 49
1 * 8 = 8       2 * 8 = 16      3 * 8 = 24      4 * 8 = 32      5 * 8 = 40      6 * 8 = 48      7 * 8 = 56      8 * 8 = 64
1 * 9 = 9       2 * 9 = 18      3 * 9 = 27      4 * 9 = 36      5 * 9 = 45      6 * 9 = 54      7 * 9 = 63      8 * 9 = 72    9 * 9 = 81
PS C:\Goproject\src\gocode\project01\main>
posted @ 2023-08-23 18:32  du-z  阅读(10)  评论(0编辑  收藏  举报