← 返回首页

控制流

if 语句

package main

import "fmt"

func main() {
    // 基本 if 语句
    age := 18
    if age >= 18 {
        fmt.Println("成年人")
    }

    // if-else 语句
    if age >= 18 {
        fmt.Println("成年人")
    } else {
        fmt.Println("未成年人")
    }

    // if-else if-else 语句
    score := 85
    if score >= 90 {
        fmt.Println("优秀")
    } else if score >= 80 {
        fmt.Println("良好")
    } else if score >= 60 {
        fmt.Println("及格")
    } else {
        fmt.Println("不及格")
    }

    // 带初始化语句的 if
    if num := 10; num % 2 == 0 {
        fmt.Println(num, "是偶数")
    } else {
        fmt.Println(num, "是奇数")
    }
}

switch 语句

package main

import "fmt"

func main() {
    // 基本 switch
    day := 3
    switch day {
    case 1:
        fmt.Println("星期一")
    case 2:
        fmt.Println("星期二")
    case 3:
        fmt.Println("星期三")
    case 4:
        fmt.Println("星期四")
    case 5:
        fmt.Println("星期五")
    default:
        fmt.Println("周末")
    }

    // 多个 case 共享处理
    grade := "B"
    switch grade {
    case "A", "B", "C":
        fmt.Println("及格")
    case "D", "F":
        fmt.Println("不及格")
    default:
        fmt.Println("未知等级")
    }

    // 无表达式的 switch(类似 if-else if)
    score := 75
    switch {
    case score >= 90:
        fmt.Println("优秀")
    case score >= 70:
        fmt.Println("良好")
    case score >= 60:
        fmt.Println("及格")
    default:
        fmt.Println("不及格")
    }

    // 带初始化语句的 switch
    switch num := 15; {
    case num < 0:
        fmt.Println("负数")
    case num == 0:
        fmt.Println("零")
    case num > 0:
        fmt.Println("正数")
    }
}

for 循环

Go 语言只有一种循环结构:for 循环。

package main

import "fmt"

func main() {
    // 标准 for 循环
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }

    // while 风格(只有条件)
    i := 0
    for i < 5 {
        fmt.Println(i)
        i++
    }

    // 无限循环
    // for {
    //     fmt.Println("无限循环")
    // }

    // 遍历切片/数组
    numbers := []int{1, 2, 3, 4, 5}
    for index, value := range numbers {
        fmt.Printf("索引 %d: 值 %d\n", index, value)
    }

    // 只需要值
    for _, value := range numbers {
        fmt.Println("值:", value)
    }

    // 遍历 map
    colors := map[string]string{
        "red":   "#FF0000",
        "green": "#00FF00",
        "blue":  "#0000FF",
    }
    for key, value := range colors {
        fmt.Printf("%s: %s\n", key, value)
    }

    // 遍历字符串
    str := "Hello"
    for index, char := range str {
        fmt.Printf("位置 %d: %c\n", index, char)
    }

    // break 和 continue
    for i := 0; i < 10; i++ {
        if i == 3 {
            continue // 跳过本次迭代
        }
        if i == 7 {
            break // 退出循环
        }
        fmt.Println(i)
    }
}

defer 语句

defer 语句用于延迟函数的执行,直到包含它的函数返回。常用于资源清理。

package main

import "fmt"

func main() {
    // defer 的执行顺序(后进先出)
    defer fmt.Println("第一个 defer")
    defer fmt.Println("第二个 defer")
    defer fmt.Println("第三个 defer")

    fmt.Println("主函数")

    // defer 用于资源清理
    processFile()
}

func processFile() {
    fmt.Println("\n打开文件...")
    // 假设打开了一个文件
    defer fmt.Println("关闭文件")

    fmt.Println("处理文件内容...")
}

panic 和 recover

panic 用于处理运行时错误,recover 用于从 panic 中恢复。

package main

import "fmt"

func main() {
    // 正常情况
    divide(10, 2)

    // 会触发 panic 的情况
    divide(10, 0)

    fmt.Println("程序继续执行")
}

func divide(a, b int) {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("恢复从 panic:", r)
        }
    }()

    if b == 0 {
        panic("除数不能为零")
    }
    result := a / b
    fmt.Println("结果:", result)
}

goto 语句

package main

import "fmt"

func main() {
    // goto 语句示例(谨慎使用)
    i := 0

start:
    fmt.Println(i)
    i++

    if i < 5 {
        goto start
    }
}