03-流程控制

1、流程控制之-条件语句

1.1 判断语句 if

1.1.1 if

1
2
3
if 布尔表达式{
/*在布尔表达式为true时执行*/
}
GO

if 的特殊写法:

1
2
if err := Connect(); err != nil {         // 这里的 err!=nil 才是真正的if判断表达式
}
GO

1.1.2 if ... else

1
2
3
4
5
if 布尔表达式 {
/*在布尔表达式为true时执行*/
} else {
/*在布尔表达式为false时执行*/
}
GO

1.1.3 f ... else if ... else

1
2
3
4
5
6
7
if 布尔表达式1 {
/*布尔表达式1为true*/
} else if 布尔表达式2{
/*布尔表达式1为false, 布尔表达式2为true*/
} else {
/*布尔表达似1和布尔表达式2为false*/
}
GO

1.1.4 if嵌套语句

1
2
3
4
5
6
if 布尔表达式1 {
/*在布尔表达式1为true时执行*/
if 布尔表达式2 {
/*在布尔表达式2为true时执行*/
}
}
GO

1.2 分支语句 switch

示例:

1
2
3
4
5
6
7
8
switch num {
case 1: // case 中可以是表达式
fmt.Println("111")
case 2:
fmt.Println("222")
default:
fmt.Println("000")
}
GO

贴士:

  • Go保留了break,用来跳出switch语句,上述案例的分支中默认就书写了该关键字
  • Go也提供fallthrough,代表不跳出switch,后面的语句无条件执行

2、流程控制之-循环语句

2.1 for 循环

Go只支持for一种循环语句,但是可以对应很多场景:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 传统的for循环
for init;condition;post{
}

// for循环简化
var i int
for ; ; i++ {
if(i > 10){
break;
}
}

// 类似while循环
for condition {}

// 死循环
for{
}

// for range:一般用于遍历数组、切片、字符串、map、管道
for k, v := range []int{1,2,3} {
}
GO

2.2 跳出循环

常用的跳出循环关键字:

  • break用于函数内跳出当前forswitchselect语句的执行
  • continue用于跳出for循环的本次迭代。
  • goto可以退出多层循环

break 跳出循环案例(continue同下):

1
2
3
4
5
6
7
8
9
10
11
12
13
OuterLoop:
for i := 0; i < 2; i++ {
for j := 0; j < 5; j++ {
switch j {
case 2:
fmt.Println(i,j)
break OuterLoop
case 3:
fmt.Println(i,j)
break OuterLoop
}
}
}
GO

goto 跳出多重循环案例:

1
2
3
4
5
6
7
8
9
10
for x:=0; x<10; x++ {
for y:=0; y<10; x++ {
if y==2 {
goto breakHere
}
}
}

breakHere:
fmt.Println("break")
GO

贴士:goto也可以用来统一错误处理。

1
2
3
4
5
6
7
if err != nil {
goto onExit
}

onExit:
fmt.Pritln(err)
exitProcess()
GO

03-流程控制
https://flepeng.github.io/021-Go-31-Go-基础-03-流程控制/
作者
Lepeng
发布于
2024年12月2日
许可协议