记Golang switch的一个“坑”

【Golang 基础系列十】Go 语言 条件语句之switch 概述 语法 实例 阅读详情

switch分支语句在各个编程语言中都很常用,能够根据条件选中一个或多个case语句进行执行,习惯于C、C++语言编程的都知道,在C、C++中switch分支判断条件会依次遍历每个case,当遇到符合条件的case时,便会执行该case中的语句,直到遇到case中显示的break语句才会终止switch流程,如果一个case中没有显示的break此case,程序便会执行下一个case(如果存在的话)。
对于从C、C++刚转到Go语言的程序员来说,这里面便存在一个“坑”,本人在开发过程中也踩过这个“坑”,那便是Go语言在switch分支语句的每个case中会自动加上一个break语句,也就是说在Go语言中程序进入了一个case流程,不管程序中有没有显示的break此case,程序都不会继续执行其他的case流程,而是直接退出整个switch流程,这里做一个简单的实验。

显示的在每个case中添加上break语句:

package main

import "fmt"

func main() {

    var num = 10

    switch num {
    case 5:
        fmt.Println("num is 5")
        break
    case 10:
        fmt.Println("num is 10")
        break
    case 15:
        fmt.Println("num is 15")
        break
    default:
        fmt.Println("num is default branch")
    }

    return
}

程序的运行结果如下:

num is 10

下面去掉每个case中显示的break语句,看看结果是什么呢。

package main

import "fmt"

func main() {

    var num = 10

    switch num {
    case 5:
        fmt.Println("num is 5")
    case 10:
        fmt.Println("num is 10")
    case 15:
        fmt.Println("num is 15")
    default:
        fmt.Println("num is default branch")
    }

    return
}

程序的运行结果如下:

num is 10

很明显,在每个case语句中是否显示的添加break语句都只会执行其中的一个分支流程,这对于想要通过break来控制每次执行case数量的程序员来说确实是一个不大不小的“坑”。

Go控制结构:if、for、switch的那些坑 if记住不用括号和初始化语句,for记住三种形态和range值拷贝的问题,switch记住默认不穿透和fallthrough的无条件穿透行为。控制结构本身不难,难在跟其他语言的习惯不一样,肌肉记忆会帮你写错。下一篇讲函数,Go的函数支持多返回值和命名返回值,闭包也是重点,里面的坑比控制结构还多。 阅读详情

相关推荐

PaddleOCR实战:如何在CentOS 8.5上搭建高性能OCR识别环境

本文详细介绍了在CentOS 8.5系统上搭建高性能PaddleOCR识别环境的完整指南。从系统环境准备、PaddlePaddle框架部署到PaddleOCR的定制化安装与性能优化,提供了针对生产环境的解决方案,包括GPU/CPU环境配置、内核参数调优及常见问题排查,帮助用户实现高效OCR识别。

weixin_29223603的博客 350

golang switch case语句 简介

注意: 1.switch/case 后是一个表达式(即:常量,变量,一个有返回的函数都可以); 2.case后的各个表达式的值的数据类型,必须和switch的表达式数据类型一致; 3.case后面可以带多个表达式,使用逗号间隔; 4.case后面的表达式如果是常量值,则要求不能重复; 5.case后面不需要带break,程序匹配到一个case后就会执行对应的代码块,然后退出switch,如果一个都匹配不到,则执行default; 6.default语句不是必须的; 7.switch 后也可以不

whatday的专栏 7150

SOI技术实战:从晶圆结构到芯片性能提升的完整解析

本文深入解析SOI(Silicon on Insulator)技术如何通过独特的三明治晶圆结构提升芯片性能,涵盖从220nm SOI层设计到7nm节点的工艺挑战。详细探讨了埋氧层的绝缘优势、性能提升的物理机制,以及AMD处理器和5G射频中的实战应用,为半导体行业提供关键技术洞见。

wdx0123456的博客 962

golang | switch-case

switch作为golang常用的分支语句,熟练掌握其语法特性,有助于在后续工作中熟练使用

weixin_39064001的博客 1954

Zigbee开发环境搭建:从驱动安装到程序烧录全指南

本文提供了一份详尽的Zigbee开发环境搭建全指南,涵盖从驱动安装到程序烧录的完整流程。重点介绍了使用SmartRF Flash Programmer和仿真器进行程序下载的关键步骤,并详细说明了USB转串口驱动的配置方法,帮助开发者快速构建稳定的Zigbee开发基础。

weixin_29195217的博客 395

从编译到调通:RK3588与FPGA的PCIe XDMA驱动实战解析

本文详细解析了在RK3588平台上为FPGA板卡编译、加载与调试PCIe XDMA驱动的完整实战流程。内容涵盖环境准备、Makefile深度定制、编译排错、驱动加载与内核日志解读、设备节点分析以及用户空间编程实战,旨在帮助开发者打通RK3588与FPGA之间的高速PCIe通信链路,实现稳定可靠的数据传输。

weixin_29304021的博客 484

Golang 基础(八)Switch case语句

【代码】Golang 基础(八)Switch case语句。

oWaitfor的博客 573

零基础基于U-Net网络实战眼底图像血管提取

文章目录1 前言2 血管提取任务概述3 U-Net架构简介4 眼底图像血管分割代码5 结果评估可视化(ROC曲线)6 改进U-Net网络完成眼底图像血管提取任务思路 1 前言 本文基于U-Net架构完成了视网膜血管的提取任务,基于Keras框架更简单的实现分割,网络、工具类、训练和预测的代码一目了然

NJU phd 在读。 5204

switch case 多个条件_Golang语言基础教程:switch分支语句

一、程序的流程结构程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。二、条件语句switch语句:“开关”switch是一个条件语句,它计算表达式并将其与可能匹配的列表进行比较,并根据匹配执行代码块。它可以被认为是一种惯用的方式来写多个if else子句。switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。switch 语句执...

weixin_35435986的博客 3424

C# MVVM的“核武器”:CommunityToolkit.Mvvm的RelayCommand实战全解

你默默打开VS:“该用RelayCommand的‘量子纠缠’魔法了!用户点击按钮无响应,调试器显示命令未绑定,但代码看起来完美无缺。“我的MVVM应用?那可是能穿越线程的命令量子计算机!异步操作阻塞了UI线程,用户界面变成“加载中”死循环。:UI与业务逻辑通过命令“量子隧道”解耦。:所有长时间操作自动进入“量子跃迁”模式。:携带任意上下文的“量子信封”传递。:命令可用性随数据变化实时同步。

java专栏 664

人工智能训练师三级考试备考全攻略|报名条件+真题+补贴申领一站式通关(2026版)

本专栏是人工智能训练师三级考证最完整的备考指南,共77篇文章,覆盖从职业认知、报名实操、AI基础知识、数据标注、模型训练测试部署、考前冲刺到考后进阶的全链路。本导读按模块整理了全部文章链接,帮你快速定位所需内容。人工智能训练师是国家认定的正式职业,证书可在osta.mohrss.gov.cn查询,三级证书可申领最高3120元技能补贴。

白话机器学习 1811

golang_switch:go中switch的用法介绍

基础语法: 第一种:有表达式 switch 表达式{ case 值1,值2: //case后的条件可以是多个值 执行语句1 case 值3: 执行语句2 ...... default: //若以上条件都不满足,则执行下面的语句 执行语句n } 第二种:无表达式 switch 表达式{ case 条件1: 执行语句1 case 条件2: 执行语句2 ...... default...

Grayan的博客 1064

R语言LASSO回归作图为什么X轴使用-log(λ)而不是log(λ),如何转化为log(λ)?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1019

golang:switch case

golang的 switch 要比C语言的更加通用,表达式不需要为常量,甚至不需要为整数,case 按照从上到下的顺序进行求值,直到找到匹配的项,如果 switch 没有表达式,则对 true 进行匹配,因此,可以将 if else-if else 改写成一个 switch。 基本写法 golang改进了 switch 的语法设计,case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行,示例代码如下: package main import.

OceanStar的博客 1949

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

如何在Go中编写Switch语句

switch语句帮助我们向其他阅读我们代码的开发人员传达一组比较在某种程度上是相互关联的。它们使未来添加新case时更容易添加不同的行为,并使我们能够确保使用default子句正确处理我们忘记的任何事情。下次当你发现自己写了多个if语句都涉及同一个变量时,尝试用switch语句重写它——当需要考虑其他替代值时,你会发现重写它更容易。

码觉客的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

好用的golang switch

python没有switch语句,需要对比的时候还得if ××==××;不够优雅 发现golang的switch后,觉得代码写出来又工整有优雅,赞! package test import ( // "encoding/json" "fmt" ) func SwitchWork(){ test1() test2() test3() test4() comparestr("S") } func test1() { var finger int fmt.Println("请伸出你的一

weixin_41479678的博客 326

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

「每周译Go」如何在 Go 中编写 Switch 语句

目录在 Go 中导入包理解 Go 中包的可见性如何在 Go 中编写条件语句如何在 Go 中编写 Switch 语句如何在 Go 中构造 for 循环在循环中使用 Break 和 Continue如何在 Go 中定义并调用函数如何在 Go 中使用可变参数函数了解 Go 中的 defer了解 Go 中的 init用构建标签定制 Go 二进制文件了解 Go 中的指针在 Go 中定义结构体在 Go 中定义...

Go中国 331

golang - switch_golang switch

不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

2401_84247760的博客 913

go switch 默认值的坑

package main import "fmt" /* * @Author:hanyajun * @Date:2019/5/14 9:49 * @Name:_switch * @Function: switch */ func ff() bool { return false } func main() { // switch 默认为true switch { case tr...

韩亚军的博客 2156

一文带你掌握 Golang switch

在Go语言中,`switch`语句是一种条件控制结构,用于根据不同的条件执行不同的代码块,它比多个`if-else`语句更加清晰和易于管理。

Coder567 3760

深入理解Go语言select与switch:用法、坑点解析、原理

对比维度 | switch | select || 设计目标 | 通用条件分支判断 | channel多路复用 || case内容 | 常量值、变量值、布尔条件 | 仅channel的读/写操作 |

qq_40230623的博客 1277

【golang学习之旅】Go的 switch 分支语句

Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只会运行选定的 case,而非之后所有的 case。有些时候需要写很多的if-else来实现一些逻辑处理,这个时候代码看上去就很丑很冗长,而且也不易于以后的维护,这个时候switch就能很好的解决这个问题。

m0_60511809的博客 652

golang如何从for循环里面的switch结束for循环

今天写go的时候遇到了一个神奇的问题,因为go里面的switch默认带有break,所以我就想当然地以为当switch某个条件达成了之后,用break就能跳出当前循环。代码如下: for { switch{ case i>j: break case i <= r && nums[i] < v: i++ case j >= l+1 ...

sinat_34896047的博客 3739

Golang的switch

注意:Go中的switch是不需要break的,自带避免问题的能力

ljy的博客 315

1个案例彻底弄懂 Go语言中的switch case语句 (Golang经典编程案例)

案例1:根据用户输入的月份,打印该月份所属的季节。 package main import ( "fmt" ) func main() { //根据用户输入的月份,打印该月份所属的季节 var month byte fmt.Print("请输入月份:") fmt.Scanln(&month) switch month { case 3, 4, 5: fmt.Pri...

数据知道的博客 4万+

go语言一个switch的坑

今天遇到一个案例,挺有意思,而且难以置信: func alwaysFalse() bool { return false } func main() { switch alwaysFalse() { case true: println(true) case false: println(false) } } 猜一下输出什么?对,你猜错了,真实输出为true。看到这有一种骂娘的冲动,为啥呀,明明是false的呀。别急,咱们改一下,你要的false就出来了。 func alwaysFa

qq_20410965的博客 378
下一篇: 线性表--删除排序数组中的重复项(Remove Duplicates from Sorted Array)
冷手马
博客等级 码龄8年 0粉丝 8原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值