Go语言学习笔记3-流程控制

if

  • 特殊写法
    返回值和判断放在一行进行处理,可以将返回值的作用范围限制在if、else语句中
1
2
3
4
if err := Connect(); err != nil {
fmt.Println(err)
return
}

for

  • 普通循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
for step := 2; step > 0; setp-- {
fmt.Println(step)
}

//初始语句可以忽略
//条件表达式也可以忽略,表示无限循环
var i int
for ; ; i++ {
if i > 10 {
break
}
}

//无限循环的另一种写法
for {
if i > 10 {
break
}

i++
}

//类似C#中的while,满足条件则退出循环
for i <= 10 {
i ++
}
  • 键值循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//遍历数组切片、map
for key, value := range []int{1, 2, 3, 4} {
fmt.Println(key, value)
}

m := map[string]int {
"hello": 100,
"world": 200,
}
//键或值均可缺省,缺省后不会进行空间分配
for _, value := range m {
fmt.Println(value)
}

//遍历通道
//遍历通道时只输出一个值,管道内的类型对应的数据
c := make(chan int)
go func() {
c <- 1
c <- 2
c <- 3
close(c)
}()

for v := range c {
fmt.Println(v)
}

switch

  • 基本写法
    switch每一个case与case间是独立的代码块,不需要通过break语句跳出当前case 代码块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var a = "hello"
switch a {
case "hello":
fmt.Println(1)
case "world":
fmt.Println(2)
default:
fmt.Println(0)
}

//多个case可以放在一起
var b = "mum"
switch b {
case "mum", "daddy":
fmt.Println("family")
}

//case后可以添加表达式
var r int = 11
switch {
case r > 10 && r < 20:
fmt.Println(r)
}
  • 为了兼容移植代码,可以使用fallthrough关键字来让case执行完后紧接着执行下一个case

goto

  • goto语句通过标签进行代码间的无条件跳转
1
2
3
4
5
6
7
8
9
10
11
12
13
for x := 0; x < 10; x++ {
for y := 0; y < 10; y++ {
if y == 2 {
goto breakHere
}
}
}

//手动返回,避免进入标签,若不返回也不影响代码执行流程
return

breakHere:
fmt.Println("done")

break

  • break可以在语句后面添加标签,表示退出某个标签对应的代码块
    标签需定义在对应的for、switch和select的代码块上
1
2
3
4
5
6
7
8
OuterLoop:
for i := 0; i < 2; i++ {
for j := 0; j < 5; j++ {
if j == 2 {
break OuterLoop
}
}
}

continue

  • continue可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用
    写法同break
1
2
3
4
5
6
7
8
OuterLoop:
for i := 0; i < 2; i++ {
for j := 0; j < 5; j ++ {
if j == 2 {
continue OuterLoop
}
}
}
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2021 Azella
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信