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

Go 语言 switch 语句的特点

在 Go 语言中,switch 语句设计得更加简洁和直观,因此不需要显式使用 break 语句来终止一个分支。这种设计决策源于 Go 语言的一些设计哲学和目标,主要包括:

  1. 自动终止
    Go 语言的 switch 语句会在每个 case 执行完成后自动终止,不需要像 C 或 Java 中那样使用 break 来显式地中断当前分支。这意味着你不需要担心遗漏 break 导致意外的“贯穿”(fall-through)行为。

  2. 避免“贯穿”
    在 Go 语言中,switch 语句的默认行为是结束当前 case 后自动跳出 switch 语句。这种设计可以减少因忘记添加 break 语句而导致的潜在错误。

  3. 显式 fallthrough
    如果你确实希望在一个 case 执行后继续执行下一个 case,可以使用 fallthrough 关键字。这样可以明确地指示编译器要进行“贯穿”,避免了无意中出现这种情况。

示例:

func main() {testSwitch(2)
}
func testSwitch(i int) {switch i {case 1:fmt.Println("one")case 2:fmt.Println("two")fallthroughcase 3:fmt.Println("three")case 4:fmt.Println("four")default:fmt.Println("none")}
}# 输出:
two
three

在这个例子中,fallthrough 关键字使得 case 2 执行完成后,程序继续执行 case 3 的代码块。这与传统的 switch 语句中需要手动添加 break 的做法不同。

fallthrough 使用注意事项

1、fallthrough 只能用于普通的 case

fallthrough 不能用于 default 分支。它只能在普通的 case 分支中使用

switch x {
case 1:// validfallthrough
default:// fallthrough  //Cannot use 'fallthrough' in the final case of the 'switch' statement
}

2、不能用于 case 中的代码块

switch x {
case 1:{fmt.Println("Case 1")//fallthrough // The 'fallthrough' statement is out of place}
case 2:fmt.Println("Case 2")
}

3、只能用于普通的 case 语句,而不能用于类型断言的 switch 语句中的 case

func printType(i interface{}) {switch i.(type) {case int:fmt.Println("Integer")case string:fmt.Println("String")//fallthrough //Cannot use 'fallthrough' in the type switchcase bool:fmt.Println("Boolean")default:fmt.Println("Unknown type")}
}

http://www.lryc.cn/news/420123.html

相关文章:

  • 【递归】什么是递归-C语言为例
  • vue针对低版本浏览器不兼容es6特性解决方案,
  • 嵌入式内存管理高频面试题及参考答案(4万字长文)
  • TinyWebserver的复现与改进(2):项目的整体框架
  • R 语言学习教程,从入门到精通,R 字符串(10)
  • QT 简易音乐播放器
  • 代码随想录八股训练营day32
  • 11.面试题——消息队列RabbitMQ
  • MySQL运维-日志
  • synchronized重量级锁的实现原理是怎样的
  • 探索 GLTF 的世界:3D 内容的未来
  • 【深度学习】【语音】TTS, CM-TTS,TTS扩散模型,论文
  • 【网络协议】网络劫持 - ARP_DNS欺骗篇
  • Linux 系统框架分析(一)
  • Leetcode 剑指 Offer II 090.打家劫舍 II
  • 上海冷链配送新篇章 华鼎冷链科技以卓越服务餐饮品牌
  • 学习鸿蒙-应用市场申请签名
  • LayUi插件
  • 使用tailwindcss轻松实现移动端rem适配
  • 2021-11-08 51单片机2位秒表启动清零
  • 谈基于大语言模型的图数据库路径检索
  • XHTML 简介
  • 驱动开发系列10 - Linux Graphics 图形栈介绍
  • Docker快速入门指南
  • VS Code中使用MSVC编译C++程序
  • 四数之和(LeetCode)
  • 学习使用备份软件BorgBackup
  • Java 实现合并两个有序链表:递归与迭代
  • 【每日刷题】Day98
  • 51单片机-LED实验二