当前位置: 首页 > article >正文

Go语言switch语句

Go语言中,switch,是一个高度灵活,其功能强大的控制结构,相比较Java中的switch,更受到语言重视。

目录

      • 1.基础用法
      • 2.多值匹配
      • 3.不指定表达式的 switch
      • 4. switch 的两种形态
          • 形式一:表达式形态
          • 形式二:无表达式形态
      • 5.使用 fallthrough 强制进入下一个分支
      • 6.使用类型断言的 switch
      • 7.嵌套 switch
      • 8. switch 用于优化复杂条件
      • 总结


它不仅可以替代多层 if-else,还能在更复杂的逻辑中灵活应用。下面详细讲解 switch 的深度用法,并结合示例展示如何充分发挥其功能。

1.基础用法

switch 的基础语法用来匹配单个变量的值:

package main

import "fmt"

func main(){
	x:=2
	switch x{
	case 1:
		fmt.println("x 等于 1");
	case 2:
		fmt.println("x 等于 2");
	case 3:
		fmt.println("x 等于 3");
	}
}

2.多值匹配

每个case分支可以匹配多个值,使用逗号分隔。

package main

import "fmt"

func main(){
	day:="Tuesday"
	switch day{
	case "Mondey","Tuesday","Wednesday":
		fmt.Println("这是工作日")
	case "Saturday","Sunday":
		fmt.Println("这是周末")
	default:
		fmt.Println("无效的天数")
	}

}

3.不指定表达式的 switch

Go中的switch可以省略表达式,直接用作条件分支判断,这类似于多层if-else

package main

import "fmt"

func main(){
	x:=1
	switch{
	case x > 0:
		fmt.Println("正数")
	case x < 0:
		fmt.Println("负数")
	default:
		fmt.Println("0")
	}
}

4. switch 的两种形态

形式一:表达式形态
switch v {
case condition1:
case condition2:
}
  • 特点
    • switch 后面带有一个表达式(如 v)。
    • 每个 case 的条件必须是一个具体值或与表达式可比较的值
    • 这种形式用于直接比较,如case 1, case 'a'等。
形式二:无表达式形态
switch {
case condition1:
case condition2!=11 && condition2 !=12:
}
  • 特点
    • switch 后没有表达式。
    • 每个 case 是一个布尔条件表达式(即可以为 truefalse)。
    • 用于复杂的条件判断场景。

5.使用 fallthrough 强制进入下一个分支

默认情况下,swich在匹配到一个case后会退出。如果想继续执行下一个case,可以使用 fallthrough 关键字。

package main

import "fmt"

func main() {
	switch x := 1; x {
	case 1:
		fmt.Println("x 是 1")
		fallthrough
	case 2:
		fmt.Println("这行会执行,因为 fallthrough")
	default:
		fmt.Println("默认分支")
	}
}
注意:fallthrough 不会重新检查条件,仅执行下一个分支。

6.使用类型断言的 switch

switch 可以配合类型断言使用,用来处理接口的不同类型

package main

import "fmt"

func main() {
	var i interface{} = 42 // i 可以是任意类型
	switch v := i.(type) {
	case int:
		fmt.Printf("i 是 int,值为 %d\n", v)
	case string:
		fmt.Printf("i 是 string,值为 %s\n", v)
	case bool:
		fmt.Printf("i 是 bool,值为 %t\n", v)
	default:
		fmt.Printf("未知类型: %T\n", v)
	}
}

7.嵌套 switch

switch 中嵌套另一个switch以实现更复杂的条件逻辑。

package main

import "fmt"

func main() {
	x := 10
	switch {
	case x > 0:
		fmt.Println("x 是正数")
		switch {
		case x%2 == 0:
			fmt.Println("x 是偶数")
		default:
			fmt.Println("x 是奇数")
		}
	case x < 0:
		fmt.Println("x 是负数")
	default:
		fmt.Println("x 是零")
	}
}

8. switch 用于优化复杂条件

当条件分支过多时,用 switch 可以避免冗长的 if-else 语句,提高代码可读性。

package main

import "fmt"

func main() {
	grade := 85
	switch {
	case grade >= 90:
		fmt.Println("优秀")
	case grade >= 75:
		fmt.Println("良好")
	case grade >= 60:
		fmt.Println("及格")
	default:
		fmt.Println("不及格")
	}
}

总结

通过灵活使用 switch,可以使代码更清晰、更易维护,是 Go 中不可或缺的控制结构之一。
  • 简单匹配:直接匹配变量值。
  • 多值匹配:每个 case 可以匹配多个值。
  • 条件判断:不指定表达式时,switch 等价于多层 if-else。
  • 类型判断:结合类型断言实现不同类型处理。
  • 灵活控制:使用 fallthrough 控制分支流转。

在结尾处,我就替大家回答一个疑惑。
Java 中 switch 不是不太支持使用吗?为什么在 Go 中却备受重视?

Go 的哲学:简单直接

  • Go语言倡导简单性与直接性,尽量避免复杂的继承和多态结构。
  • switch 被设计得功能很强大,适用于多种场景(值判断、逻辑分支、类型断言),因此在 Go 中更受重视。

Java 的哲学:面向对象优先

  • Java 是典型的面向对象语言,设计中更强调通过类和接口解决问题。
  • 对于复杂的条件判断,Java 倾向于使用多态或设计模式,switch 的使用场景相对有限。

希望大家收获,到此结束喽
( ̄︶ ̄)↗ 高抬贵手,一键三联。略略


http://www.kler.cn/a/411972.html

相关文章:

  • Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
  • 摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)
  • 工作问题总结4
  • NeurIPS 2024 有效投稿达 15,671 篇,数据集版块内容丰富
  • 【算法】连通块问题(C/C++)
  • ffmpeg视频滤镜:提取缩略图-framestep
  • 设计理念与数据反馈:面向火星熔岩管探索的跳跃机器人
  • Nodemailer使用教程:在Node.js中发送电子邮件
  • anaconda pycharm 使用问题
  • Python脚本检测网站是否开启浏览器缓存配置
  • FastDFS基础概述与系统架构详解
  • GitLab CI 配置
  • 深入浅出 WebSocket:构建实时数据大屏的高级实践
  • AdaPipe:通过自适应重新计算和细粒度的计算单元划分
  • Linux KASLR
  • DAMODEL丹摩|丹摩平台:AI时代的开发者福音
  • 微信小程序+Vant-自定义选择器组件(多选
  • 【Zookeeper 和 Kafka】为什么 Zookeeper 不用域名?
  • 权限的相关内容
  • 昇思MindSpore第六课---Roberta Prompt Turning
  • c#异步编程(async/await)
  • 阿里云多账号统一认证
  • 玛哈特矫平机:精密制造中的平整大师
  • 多模态大型语言模型(MLLM)综述
  • 微信小程序数据请求教程:GET与POST请求详解
  • Centos 7 系统 openGauss 3.1.0 一主两备集群安装部署指南