Golang的条件判断

技术笔记

Go语言提供了多种条件判断语句,用于控制程序的执行流程。本文将详细介绍Go中的条件判断语句,包括ifif..elseif嵌套switchselect语句

1. if 判断语句

if语句是Go中最基本的条件判断结构,当条件为true时执行代码块

语法结构

if 条件 {
    // 条件为 true 时执行的代码
}

示例代码

func first() {
    a := 15
    if a < 20 {
        fmt.Println("15 是小于 20 的")
    }
}

输出: 15 是小于 20 的

2. if..else 判断语句

当需要在条件为false时执行其他代码,可以使用if..else语句

语法结构

if 条件 {
    // 条件为 true 时执行的代码
} else {
    // 条件为 false 时执行的代码
}

示例代码

func second() {
    a := 15
    if a > 20 {
        fmt.Println("15 是大于 20 的")
    } else {
        fmt.Println("15 是小于 20 的")
    }
}

输出: 15 是小于 20 的

3. if 嵌套语句

if语句内部可以再嵌套if语句,用于处理更复杂的条件判断

示例代码

func third() {
    a := 10
    b := 20
    if a == 10 {
        fmt.Println("a = 10")
        if b == 20 {
            fmt.Println("b = 20")
        }
    }
}

输出:

a = 10
b = 20

4. switch 语句

switch语句用于基于不同条件执行不同动作,比多个if..else更加清晰

语法特点

  • switch会从第一个case开始匹配,找到匹配项后执行相应代码
  • 可以使用fallthrough关键字强制执行后续的case语句
  • fallthrough不会判断下一条case的表达式结果是否为true

示例代码

func fourth() {
    grades := 90
    var level string

    switch grades {
    case 90:
        level = "A"
    case 80:
        level = "B"
    case 70:
        level = "C"
    case 60:
        level = "D"
    default:
        level = "F"
    }

    switch {
    case level == "A":
        fmt.Println("等级为优秀")
    case level == "B":
        fmt.Println("等级为良好")
    case level == "C":
        fmt.Println("等级为中等")
    case level == "D":
        fmt.Println("等级为普通")
    default:
        fmt.Println("等级为差")
    }
}

输出: 等级为优秀

5. select 语句

select语句是专门为通道(channel)设计的,用于处理通道操作。它会等待直到某个case中的通道操作可以执行

语法特点

  • select会监听所有case中的通道操作
  • 当多个通道同时准备好时,会随机选择一个执行
  • 如果所有通道都没有准备好,会执行default分支
  • default分支通常是可选的,用于避免阻塞

示例代码

func fifth() {
    // 创建三个通道
    a := make(chan int)
    b := make(chan int)
    c := make(chan int)

    // select 监听多个通道操作
    select {
    case <-a:  // 从通道 a 接收数据
        fmt.Println("从 a 收到数据")
    case <-b:  // 从通道 b 接收数据
        fmt.Println("从 b 收到数据")
    case <-c:  // 从通道 c 接收数据
        fmt.Println("从 c 收到数据")
    default:
        fmt.Println("所有通道都没有准备好")
    }
}

输出: 所有通道都没有准备好

总结

语句类型 适用场景 特点
if 单条件判断 简单直接
if..else 双分支判断 覆盖真假两种情况
if嵌套 多级条件判断 可处理复杂逻辑
switch 多分支判断 代码清晰易读
select 通道操作监听 Go特有,用于并发编程

运行完整示例

要运行本文中的所有示例,可以使用以下main函数:

package main  

import "fmt"  

func main() {  
    fmt.Println("----if判断语句----")  
    first()  
    fmt.Println("----if..else判断语句----")  
    second()  
    fmt.Println("----if嵌套语句----")  
    third()  
    fmt.Println("----switch语句----")  
    fourth()  
    fmt.Println("----select语句----")  
    fifth()  
}  

func first() {  
    a := 15  
    if a < 20 {  
       fmt.Println("15 是小于 20 的")  
    }  
}  

func second() {  
    a := 15  
    if a > 20 {  
       fmt.Println("15 是大于 20 的")  
    } else {  
       fmt.Println("15 是小于 20 的")  
    }  
}  

func third() {  
    a := 10  
    b := 20  
    if a == 10 {  
       fmt.Println("a = 10")  
       if b == 20 {  
          fmt.Println("b = 20")  
       }  
    }  
}  

func fourth() {  
    // 使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true  
    // 可以尝试使用,这里不展示了  
    grades := 90  
    var level string  

    switch grades {  
    case 90:  
       level = "A"  
    case 80:  
       level = "B"  
    case 70:  
       level = "C"  
    case 60:  
       level = "D"  
    default:  
       level = "F"  
    }  

    switch {  
    case level == "A":  
       fmt.Println("等级为优秀")  
    case level == "B":  
       fmt.Println("等级为良好")  
    case level == "C":  
       fmt.Println("等级为中等")  
    case level == "D":  
       fmt.Println("等级为普通")  
    default:  
       fmt.Println("等级为差")  
    }  
}  

func fifth() {  
    // 假设 a, b, c 是通道  
    a := make(chan int) // channel 缩写 chan 通道  
    b := make(chan int) // 这里创建了 3 个通道  
    c := make(chan int)  

    // select 是专门为通道设计的,它的唯一用途就是处理通道操作  
    select {  
    case <-a: // 从通道接收数据  
       fmt.Println("从 a 收到数据")  
    case <-b:  
       fmt.Println("从 b 收到数据")  
    case <-c:  
       fmt.Println("从 c 收到数据")  
    default:  
       fmt.Println("所有通道都没有准备好")  
    }  
}

Go语言的这些条件判断语句为开发者提供了灵活的控制流选项,可以根据不同场景选择最合适的语句来编写清晰、高效的代码

返回列表