Golang基础之流程控制
0、什么是流程控制?
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的经脉
Go语言中最常用的流程控制有if
和for
,而switch
和goto
主要是为了简化代码,降低重复代码而生的结构,属于扩展类的流程控制
1、for循环
Go语言中的所有循环类型均可以使用for
关键字来完成,条件表达式返回true
时循环体不停地进行循环,直到条件表达式返回false
时自动退出循环。
1.1、for循环常见五大形式
for循环的基本格式如下:
for 初始语句;条件表达式;结束语句{
循环体语句
}
第一种形式:在for中声明变量,这种变量作用域仅仅在该循环里,循环结束后变量会被回收
for i :=0 ;i < 10 ; i++ {
fmt.Println(i)
}
第二种形式:在for循环前先声明变量,该变量作用于该函数内
for循环的初始语句可以被忽略,但是初始语句后的分号必须要写,例如:
i := 0
for ;i < 10 ; i++ {
fmt.Println(i)
}
第三种形式:循环三个标准值都不在for关键字后写明
for循环的初始语句和结束语句都可以被忽略,例如:
i := 5
for ;i<10;{
fmt.Println(i)
i++
}
第四形式:跟 C 或者 Java 中一样,可以让前置、后置语句为空
sum := 1
for sum < 2000{
sum += sum
}
fmt.Println(sum)
第五种形式:无限循环
for {
循环语句
}
for循环可以通过break
、goto
、return
、panic
语句强制退出循环。
1.2、for range(键值循环)
Go语言中可以使用for range
遍历数组、切片、字符串、map及通道(channel),通过for range
遍历的返回值,有以下规律:
s := "Hello梅州"
for i,v := range s{
fmt.Printf("%d %c\n",i,v)
}
// 执行结果
0 H
1 e
2 l
3 l
4 o
5 梅
8 州
定义一个数组,然后循环数组的index和value
var array [3]int
array[0] = 111
array[1] = 112
array[2] = 113
for i,v := range array {
fmt.Println(i,v)
}
// 执行结果
0 111
1 112
2 113
Note:
1.数组、切片、字符串返回索引和值。
2.map返回键和值。
3.通道(channel)只返回通道内的值。
2、if else语句
if条件判断基本写法
if 表达式1 {
分支1
} else if 表达式2 {
分支2
} else {
分支3
}
举个例子:
age := 18
if age > 35{
fmt.Println("人到中年")
}else if age > 18{
fmt.Println("青春绽放")
}else{
fmt.Println("好好学习")
}
if条件判断特殊写法
// age变量此时只在if条件判断语句中生效
if age := 19;age > 18{ // 如果 age > 18 就执行这个{}中的代码
fmt.Println("成年了!")
}else{ // 否则就执行这个{}中的代码
fmt.Println("该写暑假作业了!")
}
3、switch case
使用swithch
语句可方便对大量的值进行条件判断
switch n {
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 3:
fmt.Println("中指")
case 4:
fmt.Println("无名指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("无效的数字")
}
每个switch
语句中只能有一个default
switch case特殊写法
switch n:=5;n {
case 1:
fmt.Println("大拇指")
case 2:
fmt.Println("食指")
case 3:
fmt.Println("中指")
case 4:
fmt.Println("无名指")
case 5:
fmt.Println("小拇指")
default:
fmt.Println("无效的数字")
}
switch case多个值
switch n:=5;n {
case 1,3,5,7,9:
fmt.Println("呵呵")
case 2,4,6,8,10:
fmt.Println("哈哈")
}