程序的执行是由上到下逐行执行,叫做 顺序结构 。程序中为了满足某种条件的时候才会执行的结构,叫做 选择结构 ,当满足条件时候循环反复执行多次的代码, 叫做 循环结构。

if分支语句

Go语言中关键字if用于某个条件的判断是否成立,如果成立则会执行大括号{}内部的代码,否则会忽略这段代码。如果有else条件则会执行else条件内的代码块。

if 布尔表达式{
    //布尔条件为true时候执行代码
}

if 布尔表达式 {
    //条件成立执行代码
}else{
      //条件不成立执行代码
}

if 布尔表达式 {
    //布尔条件为true时候执行代码
}else if 布尔表达式2{
      //布尔条件为false时候执行代码
}else{
     //上面都不成立执行代码
}

ifGo语言中的特殊写法

其他语言中if后面都是跟随着条件判断语句,而Go语言中可以在if之后,条件判断之间再加上一段执行语句,执行的结果再用作后面的条件判断。例如:

package main

func main() {
    if err := myFunc2(); err > 50 {
        println(err)  // 100
    }

}

func myFunc2() int {
    return 100
}

上面代码中err是函数myFunc()返回的结果,执行myFunc()语句之后,再通过条件判断对err进行判断,err的作用域就只能够在这条语句范围内。

switch分支语句

switchif的区别是,if之后只能是bool类型,而switch可以作用其他类型。 但是case后面的数据必须和变量类型一致。case是没有先后顺序的,只要符合条件就会进入。case后面的数值 必须是唯一的不能重复。default不是必须的,根据实际情况来写。

package main

import "fmt"

func main() {

    // switch语法一
    switch 变量名{
        case 数值1: 分支1
        case 数值2: 分支2
        case 数值3: 分支3
        ...
        default:
            最后一个分支
    }

    // 语法二 case 后可以跟随多个数值, 满足其中一个就执行
    switch value {
        case 1,2,3:
            fmt.Println("value是1或2或3")
        case 4,5,6:
            fmt.Println("value是4或5或6")
    }

    //语法三 可以添加初始化变量 作用于switch内部
    switch result := calculate() {
        case result < 0:
            ...
        case result > 0:
            ...
    }
}

switchbreakfallthrough

  • break代表退出当前所有执行,跳出整个switch,在Go中,break不是必须的,可以省略。
  • fallthrough表示强制执行后面没有执行的case代码。
package main

import "fmt"

func main() {
    month := 2
    switch month {
    case 1:
        fmt.Println("一月")
    case 2:
        fmt.Println("二月")
        fallthrough
    case 3:
        fmt.Println("三月")
    case 4:
        fmt.Println("四月")
    }
    // fallthrough 语句会强制执行后面的分支,不管条件是否满足
    // 输出 二月 三月
}

for循环语句

for循环是程序流程控制中的循环结构,满足条件时,代码便会执行多次,与其他的ifswitch满足条件后只执行一次不同。

基于计数器的迭代

for 初始化语句; 条件语句; 修饰语句 {}

代码:

package main

import "fmt"

func main() {
    // 基于计数器迭代
    for i := 0; i < 5; i++ {
        fmt.Printf("This is the %d iteration\n", i)
    }
}

输出

This is the 0 iteration
This is the 1 iteration
This is the 2 iteration
This is the 3 iteration
This is the 4 iteration

for循环不加上条件,那么,就是死循环

package main

import "fmt"

func main() {
    // 死循环
    for {
        fmt.Println("loop")
    }
}

输出

loop
loop
loop
loop
loop
...

for循环中的breakcontinue

  • break用来终止执行for循环语句,终止整个循环
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        if i == 3 {
            break
        }
        fmt.Println(i)
    }
}

输出

0
1
2

按理来说,会一直循环输出到4,实际上到了2就停止了,由此可见,循环已被终止。

  • continue终止当前循环,进入到下一次循环
package main

import "fmt"

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

输出

0
1
2
4

goto语句

可以跳转到程序中指定的行和嵌套循环里的break标签是一样的,不管后面还有多少代码都不再执行。
goto可以搭配标签使用

package main

import "fmt"

func main() {
LABEL1:
    for i := 0; i <= 5; i++ {
        for j := 0; j <= 5; j++ {
            if j == 4 {
                continue LABEL1
            }
            fmt.Printf("i is: %d, and j is: %d\n", i, j)
        }
    }
}

continue 语句指向 LABEL1,当执行到该语句的时候,就会跳转到 LABEL1 标签的位置。

j==4j==5的时候,没有任何输出:标签的作用对象为外部循环,因此i会直接变成下一个循环的值,而此时j的值就被重设为0,即它的初始值。如果将continue改为break,则不会只退出内层循环,而是直接退出外层循环了。另外,还可以使用goto语句和标签配合使用来模拟循环。

return

主要用于返回相应的值,一个函数中,返回的值可以是多个。

package main

func main() {
    a, b := myFunc3()
    println(a, b)
}

func myFunc3() (a, b int) {
    a, b = 100, 200
    return a, b
}

Last modification:November 11, 2022
If you think my article is useful to you, please feel free to appreciate