Golang switch语句的具体使用

 更新时间:2024年08月15日 10:09:04   作者:e5pool  
switch 语句提供了一种简洁的方式来执行多路分支选择,本文主要介绍了Golang switch语句的具体使用,具有一定的参考价值,感兴趣的可以了解一下

简介

switch 语句提供了一种简洁的方式来执行多路分支选择

基本使用

  • 基本语法如下:
switch expression {
case value1:
    // 当 expression 的值等于 value1 时执行
case value2:
    // 当 expression 的值等于 value2 
  • switch 的每个分支自动提供了隐式的 break,意味着只有第一个匹配的 case 会被执行。不需要显式地在每个 case 后面加 break

  • 如果你想要一个 case 执行后继续检查下一个 case,可以使用 fallthrough 语句:

switch x {
case 1:
    fmt.Println("x is 1")
    fallthrough
case 2:
    fmt.Println("x is 2")
    fallthrough
case 3:
    fmt.Println("x is 3")
default:
    fmt.Println("x is not 1, 2, or 3")
}

在上面的代码中,如果 x 是 1,它会打印出 “x is 1” 和 “x is 2”,因为 fallthrough 语句导致程序继续执行下一个 case

  • switch 也支持不带表达式的用法,其中每个 case 可以包含一个条件表达式:
y := 20

switch {
case y > 10:
    fmt.Println("y is greater than 10")
case y == 10:
    fmt.Println("y is exactly 10")
default:
    fmt.Println("y is less than 10")
}

在这种情况下,switch 语句类似于一系列的 if-else 语句,但其语法更加清晰

  • switch 也可以包含初始化语句,类似于 if 语句:
switch z := computeValue(); {
case z > 10:
    fmt.Println("z is greater than 10")
case z == 10:
    fmt.Println("z is exactly 10")
default:
    fmt.Println("z is less than 10")
}

常见用法

  • 类型判断: switch 可以用来进行类型判断,在这种情况下,它会匹配一个接口变量的动态类型
var i interface{} = /* 一个值 */

switch t := i.(type) {
case string:
    fmt.Println("i is a string:", t)
case int:
    fmt.Println("i is an int:", t)
default:
    fmt.Printf("Unknown type %T\n", t)
}

在这个例子中,i.(type) 用来发现接口变量 i 的动态类型
注意:i.(type) 用于 switch 语句中进行类型断言的类型判断。它只能在 switch 的类型判断分支中使用,不可以单独使用在其他地方

  • 多值匹配: 你可以在一个 case 语句中测试多个值。这可以简化代码,避免编写多个具有相同结果的 case 语句
switch x {
case 1, 2, 3:
    fmt.Println("x is 1, 2 or 3")
default:
    fmt.Println("x is not 1, 2, or 3")
}
  • 条件组合: case 语句中可以包含多个条件,这些条件可以是逻辑表达式
switch {
case x > 0 && x < 10:
    fmt.Println("x is between 1 and 9")
case x == 10 || x == 20:
    fmt.Println("x is either 10 or 20")
}
  • 无条件的 switch: 无条件的 switch 相当于一个更优雅的 if-else 链
switch {
case score >= 90:
    fmt.Println("Grade: A")
case score >= 80:
    fmt.Println("Grade: B")
case score >= 70:
    fmt.Println("Grade: C")
default:
    fmt.Println("Grade: F")
}
  • 退出循环: 在循环内部,switch 可以与 break 语句一起使用来退出循环
for {
    switch {
    case someCondition():
        fmt.Println("Condition met")
        break // 默认只会跳出 switch
    default:
        fmt.Println("Default case")
    }
    break // 退出 for 循环
}

请注意,在这种情况下,break 语句只会退出 switch,而不是循环。要退出循环,需要在外部再次使用 break 语句

  • 跳过当前迭代: 在循环中使用 switch,可以配合 continue 语句来跳过当前迭代
for x := 0; x < 5; x++ {
    switch {
    case x%2 == 0:
        // 跳过偶数
        continue
    }
    fmt.Println("Odd:", x)
}

到此这篇关于Golang switch语句的具体使用的文章就介绍到这了,更多相关Golang switch语句内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • golang中http请求的context传递到异步任务的坑及解决

    golang中http请求的context传递到异步任务的坑及解决

    这篇文章主要介绍了golang中http请求的context传递到异步任务的坑及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Go中使用单调时钟获得准确的时间间隔问题

    Go中使用单调时钟获得准确的时间间隔问题

    这篇文章主要介绍了Go中使用单调时钟获得准确的时间间隔,在go语言中,没有直接调用时钟的函数,可以通过 time.Now() 获得带单调时钟的 Time 结构体,并通过Since和Until获得相对准确的时间间隔,需要的朋友可以参考下
    2022-06-06
  • Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解)

    Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解)

    这篇文章主要介绍了Go基于GORM 获取当前请求所执行的 SQL 信息(思路详解),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Golang 实现Redis 协议解析器的解决方案

    Golang 实现Redis 协议解析器的解决方案

    这篇文章主要介绍了Golang   实现 Redis 协议解析器,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分,需要的朋友可以参考下
    2022-10-10
  • go切片的copy和view的使用方法

    go切片的copy和view的使用方法

    这篇文章主要介绍了go切片的copy和view的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Go语言学习之接口使用的示例详解

    Go语言学习之接口使用的示例详解

    Go语言并没有类的定义,接口可以说Go语言最接近于类的实现方式,但是更轻量。本文将通过一些简单的示例和大家介绍下Go语言中接口的使用,感兴趣的可以学习一下
    2022-11-11
  • 提高golang源码阅读效率的六个高级技巧

    提高golang源码阅读效率的六个高级技巧

    随着业务的发展,自己对代码的审美的改变,我们不断的迭代这些代码,代码量可以说是与日俱增,代码的某些结构也会发生大大小的改变,这些都要求我们在阅读代码的时候,需要更快的效率和技巧
    2024-01-01
  • golang开启mod后import报红的简单解决方案

    golang开启mod后import报红的简单解决方案

    这篇文章主要给大家介绍了关于golang开启mod后import报红的简单解决方案,文中通过图文将解决的办法介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • golang生成RSA公钥和密钥的实现方法

    golang生成RSA公钥和密钥的实现方法

    本文主要介绍了golang生成RSA公钥和密钥的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • go实现限流功能示例

    go实现限流功能示例

    这篇文章主要为大家介绍了go实现限流功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论