Notes
Go
流程控制

流程控制

分支控制

if

if 条件 {
    // do something
} else if 条件 {
    // do something
} else {
    // do something
}

这里的条件不需要使用括号括起来。

switch

switch 变量 {
case 值1:
    // do something
case 值2:
    // do something
default:
    // do something
}

注意,与其他语言不同,Go 中的 switch 语句不需要 break,一旦条件符合自动终止。

但是如果需要继续执行下一个条件,可以使用 fallthrough 关键字。

switch 变量 {
case 值1:
    // do something
    fallthrough
case 值2:
    // do something
default:
    // do something
}

对于相同结论的条件,可以使用逗号分隔。

switch 变量 {
case 值1, 值2:
    // do something
default:
    // do something
}

case 中使用布尔表达式是常用的技巧。

switch {
case a > 0:
    // do something
case a < 0:
    // do something
default:
    // do something
}

避免嵌套 if

可以使用下面的技巧来避免嵌套 if

  • 尽快返回:让条件不满足的分支直接 return。

  • 提取函数:将条件判断提取到函数中。

循环控制

for

Go 中只提供了 for 循环,没有 while 循环。

但是提供了三种 for 循环的写法。

无限循环

for {
    // do something
}

例如:

for {
    fmt.Println("Hello, World!")
}

如果想要终止循环,可以使用 break 关键字。

for {
    fmt.Println("Hello, World!")
    break
}

条件循环

for 条件 {
    // do something
}

例如:

var i int = 0
 
for i < 10 {
    fmt.Println(i)
    i++
}

计数循环

for 初始语句; 条件; 结束语句 {
    // do something
}

例如:

for i := 0; i < 10; i++ {
    fmt.Println(i)
}

循环中的控制语句

break:终止循环。

continue:跳过当前循环,继续下一次循环。

for i := 0; i < 10; i++ {
    if i == 5 {
        continue
    }
    fmt.Println(i)
}

表示当 i 等于 5 时,跳过当前循环,继续下一次循环。

for-range

for-range 可以用来遍历数组、切片、字符串、map 等。

for index, value := range array {
    // do something
}

忽略 index 参数:

for _, value := range array {
    // do something
}

跳转控制

Go 中可以使用 labelgoto 来实现跳转。

label:
    // do something
goto label

例如:

var i int = 0
 
label:
    fmt.Println(i)
    i++
    if i < 10 {
        goto label
    }

表示当 i 小于 10 时,跳转到 label 标签处。

也可以使用 goto 来跳出多层循环。

for i := 0; i < 10; i++ {
    for j := 0; j < 10; j++ {
        if j == 5 {
            goto breakTag
        }
    }
}
 
breakTag:
    fmt.Println("done")