5分钟看懂Go语言switch用法及应用场景

简介: 5分钟看懂Go语言switch用法及应用场景

/ Go 语言 switch 案例详解 /

switch 语句是编程语言中一种常见的条件控制结构,它可以实现多条件判断,非常灵活方便。Go 语言中提供了强大的 switch 语法,合理利用 switch 语句可以使代码更简洁可读。

本文将全面介绍 Go 语言 switch 语句的相关用法,内容涵盖:

  1. switch 语句基本结构
  2. switch 表达式
  3. case 表达式
  4. fallthrough 语法
  5. 无表达式的 switch
  6. Type Switch
  7. 技巧与最佳实践
  8. switch 应用示例

通过详细的语法讲解和示例代码,可以深入掌握 Go 语言 switch 语句的设计思想和各种用法技巧,在项目中灵活运用。

1

 

1. switch 语句基本结构

Go 语言 switch 语句的基本语法如下:

switch表达式 {
    case表达式1:
       代码体1;
    case表达式2:
       代码体2;
    default:
       default代码体;
}

switch 会根据表达式匹配每一个 case,选择执行对应的代码体,没有匹配的代码会执行 default。

2

 

2. switch 表达式

switch 表达式会与每个 case 表达式进行比较,通常为一个变量名或常量:

switch grade {
  case "A":
    fmt.Println("优秀")
  case "B":  
    fmt.Println("良好")
  // ...
}

这里 grade 和每个 case 进行对比。

3

 

3. case 表达式

case 后为要匹配的具体表达式,通常是常量或字面量:

switch animal {
case "猫":
  fmt.Println("喵喵叫")
case "狗":
  fmt.Println("汪汪叫")  
}

case 后也可以是一个范围,通过 fallthrough 执行下一个 case。

4

 

4. fallthrough

fallthrough 语法可以强制执行下一个 case:

switch score {
case 90:
  fmt.Println("优秀")
  fallthrough
case 80:  
  fmt.Println("良好") 
}  

如果 score 是 90,将依次打印优秀和良好。

5

 

5. 无表达式的 switch

Go 语言的 switch 不需要表达式,可以直接使用:

switch {
  case grade > 90:
    fmt.Println("优秀") 
  case grade > 80:  
    fmt.Println("良好")
  // ...  
}

    6

     

    6. Type Switch

    switch 还支持按类型匹配,称为 type switch:

    func printType(i interface{}) {
      switch i.(type) {
      case int:
        println("int")
      case string:
        println("string") 
      default:
        println("unknow")    
      }
    }

    这样可以检测匹配接口的具体类型。

    7

     

    7. 技巧与最佳实践

    switch 使用的一些技巧:

    • 配合 fallthrough 实现多条件匹配
    • 将复杂条件提前返回
    • 将类型匹配和值匹配结合使用
    • 与 select 语句配合处理 channel
    • 避免过长的 switch 语句

    一个良好 case 的例子:

    func f(v int) string {
      switch {
      case v < 0:
        return "负数"
      case v == 0: 
        return "零"
      case v > 0 && v < 10:  
        return "正数"
      default:
        return "比较大的数"
      }
    } 

    利用各种技巧可以写出可读性好的 switch 语句。

    8

     

    8. switch 应用示例

    switch 广泛应用于各种条件判断场景:

    // 命令行参数判断
    switch os.Args[1] {
    case "hello":
      fmt.Println("world")
    case "foo":  
      fmt.Println("bar")
    default:
      fmt.Println("usage: command {hello|foo}")
    }
    // 接口类型判断
    func Do(v interface{}) {
      switch v.(type) {
      case int:
        fmt.Println("int")
      // ...
      }
    }

    switch 灵活多变,可以处理复杂的条件判断。

    9

     

    总结

    通过本文,我们全面介绍了 Go 语言 switch 的设计思想、语法结构、高级用法等知识点,并通过示例演示了如何在实际项目中合理利用 switch 编写更简洁的代码。掌握 switch 语句可以让我们的 Go 语言编程更上一层楼。


    目录
    相关文章
    |
    4天前
    |
    Go 索引
    go语言中的循环语句
    【11月更文挑战第4天】
    13 2
    |
    4天前
    |
    Go C++
    go语言中的条件语句
    【11月更文挑战第4天】
    15 2
    |
    4天前
    |
    Go
    go语言中的 跳转语句
    【11月更文挑战第4天】
    12 4
    |
    4天前
    |
    JSON 安全 Go
    Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
    本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
    17 1
    |
    6天前
    |
    存储 JSON 监控
    Viper,一个Go语言配置管理神器!
    Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
    23 2
    |
    10天前
    |
    JavaScript Java Go
    探索Go语言在微服务架构中的优势
    在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出。本文将深入探讨Go语言在构建微服务时的性能优势,包括其在内存管理、网络编程、并发模型以及工具链支持方面的特点。通过对比其他流行语言,我们将揭示Go语言如何成为微服务架构中的一股清流。
    |
    9天前
    |
    Ubuntu 编译器 Linux
    go语言中SQLite3驱动安装
    【11月更文挑战第2天】
    31 7
    |
    9天前
    |
    关系型数据库 Go 网络安全
    go语言中PostgreSQL驱动安装
    【11月更文挑战第2天】
    38 5
    |
    9天前
    |
    安全 Go
    用 Zap 轻松搞定 Go 语言中的结构化日志
    在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
    25 1
    |
    8天前
    |
    程序员 Go
    go语言中的控制结构
    【11月更文挑战第3天】
    84 58