Golang的条件判断

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

1. if 判断语句

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

语法结构

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

示例代码

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

输出: 15 是小于 20 的

2. if...else 判断语句

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

语法结构

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

示例代码

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

输出: 15 是小于 20 的

3. if 嵌套语句

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

示例代码

go 复制代码
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

示例代码

go 复制代码
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分支通常是可选的,用于避免阻塞

示例代码

go 复制代码
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函数:

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

相关推荐
磊 子1 小时前
STL算法库讲解1
开发语言·c++·算法
Irissgwe1 小时前
7、传输层协议 TC
服务器·网络·tcp/ip
27669582921 小时前
谷歌google cookie逆向角度分析
开发语言·python·google·sgss·谷歌搜索·sg-ss·谷歌cookie逆向
时寒的笔记1 小时前
瑞数案例欧冶解读py和js文件最终版
开发语言·javascript·ecmascript
zmzb01031 小时前
Python课后习题训练记录Day123
开发语言·python
艾莉丝努力练剑1 小时前
【Qt】事件
服务器·开发语言·网络·数据库·qt·tcp/ip·计算机网络
PersistJiao1 小时前
python环境下免费、专业的中英翻译
开发语言·windows·python·机器翻译
rqtz1 小时前
【C++】源码编译 Qt5.15.3|Ubuntu22.04 下 ROS 开发环境搭建
开发语言·c++·qt·ros
Jun6261 小时前
QT(9)-Qjson移植
开发语言·qt