Golang switch 进阶

news/2024/11/9 9:51:24/

文章目录

        • 一. case 表达式中的子表达式应该不重复
        • 二. 使用表达值突破 一 的限制
        • 三. case 类型匹配
        • 四. switch 中的自动类型转换

一. case 表达式中的子表达式应该不重复

**bad(编译不通过) : **
第九行和第十一行的 3 重复了

package mainimport "fmt"var a = []uint{1, 2, 3, 4, 5, 6}func main() {switch 1 {case 1, 2, 3:fmt.Println("1 or 2 or 3")case 3, 4:fmt.Println("3 or 4")}
}

good :

package mainimport "fmt"var a = []uint{1, 2, 3, 4, 5, 6}func main() {switch 1 {case 1, 2, 3:fmt.Println("1 or 2 or 3")case 4:fmt.Println("4")}
}

二. 使用表达值突破 一 的限制

三个case中都包含2,但是由于前两个case是表达式a[1], 这个是可以正常运行的

package mainimport "fmt"var a = []uint{1, 2, 3, 4, 5, 6}func main() {switch uint(4) {case 1, a[1], 3:fmt.Println("1 or 2 or 3")case a[1], 4:fmt.Println("2 or 4")case 2:fmt.Println("2")}
}

三. case 类型匹配

switch p1.(type)

  1. 这里要求 p1 实现了某个 接口
  2. case中的表达式是这个 接口的具体实现类型

example 1 (good) :

package mainimport "fmt"var b uint8
var c bytetype MyInt interface {pr()
}type MI int
type BMI intfunc (M MI) pr() {fmt.Println(M)
}func (M BMI) pr() {fmt.Println(M)
}func main() {var d MyIntd = MI(b)switch d.(type) {case MI:fmt.Println("BMI")case BMI:fmt.Println("BMI")}
}

example 2(good):

package mainimport "fmt"var a string
var b uint8func main() {d := interface{}(b)switch d.(type) {case string:fmt.Println("string")case uint8:fmt.Println("unit8")}
}

example 3(bad):
违反了 一,因为 byte 本质就是 unit8 , 编译不通过

package mainimport "fmt"var a string
var b uint8func main() {d := interface{}(b)switch d.(type) {case string:fmt.Println("string")case uint8:fmt.Println("unit8")case byte:fmt.Println("byte")}
}

example 4(bad) :
b非接口类型,编译不通过

package mainimport "fmt"var a string
var b uint8func main() {switch b.(type) {case string:fmt.Println("string")case uint8:fmt.Println("unit8")}
}

四. switch 中的自动类型转换

switch <value> :
case <case-value>

如果case-value 是常量,会尝试进行自动类型转换后,再和 value 匹配
right :

package mainimport "fmt"func main() {switch 1 + 1 {case 2:fmt.Println(2)}
}

**error : **main.go:8:7: invalid case b in switch on 1 + 1 (mismatched types int64 and int)

package mainimport "fmt"func main() {b := int64(2)switch 1 + 1 {case b: fmt.Println(2)}
}

http://www.ppmy.cn/news/262418.html

相关文章

TensorRT 从7.2升级到8.5,改写plugin以适配新版本

前言 TensorRT是NVIDIA推出的一款高效深度学习模型推理框架&#xff0c;其包括了深度学习推理优化器和运行时&#xff0c;能够让深度学习推理应用拥有低时延和高吞吐的优点。 TensorRT的版本迭代速度非常快&#xff0c;很多之前写的plugin在版本升级后可能就没法直接使用&…

长虹智能电视进工厂模式方法汇总(遥控器有无数字按键均可)

一、适合新款带语音的遥控器 按【菜单】键后&#xff0c;当焦点移至“情景模式”下的“标准模式”菜单上时&#xff0c;按【上、右、右】组合键&#xff0c;弹出数字软键盘&#xff0c;当输入0816进入工厂菜单. https://www.jozecn.cn/256.html 二、适合带数字按键或遥控器上…

【高级篇】分布式缓存

分布式缓存 – 基于Redis集群解决单机Redis存在的问题 单机的Redis存在四大问题&#xff1a; 1.Redis持久化 Redis有两种持久化方案&#xff1a; RDB持久化AOF持久化 1.1.RDB持久化 RDB全称Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xf…

家电智能化转型之下 长虹在挖什么“坑”?

这几年&#xff0c;随着科技的蒸蒸向上&#xff0c;家电行业也从功能走向智能&#xff0c;无数的智能产品涌现至市场&#xff0c;尤其是以 国内亦是如此&#xff0c;绝大多数的家电企业都开始着手对智能系列的挖掘&#xff0c;其中更有上者已经开始对人工智能产品进行开发&…

长虹变频空调整机不工作维修案例分析

【例1】 长虹KFR-28GW/Bp型变频空调不启动&#xff0c;并且指示灯、显示屏不亮分析与检修&#xff1a;通过故障现象分析得知&#xff0c;该机没有市电输入或室内机的电源电路、微处理器电路异常。 用万用表交流电压挡测为空调供电的插座有226V市电电压&#xff0c;说明供电系…

【STM32】实现长虹空调遥控部分功能(三)加上ESP8266实现手机远程控制

前言 既然能成功控制空调了&#xff0c;巧的是我的手机没有红外功能&#xff0c;那就尝试加一个ESP8266实现手机远程控制空调&#xff0c;这里用的ESP8266在之前的文章里有介绍过怎么使用&#xff0c;感兴趣的可以参考以下文章 使用串口调试助手配置ESP8266模块. STM32ESP8266…

空调电脑板电路的检测方法大全(建议收藏)

电脑板电路&#xff08;电控板电路&#xff09;的检测方法除了采用电压测量法、电阻测量法外&#xff0c;还可采用温度法、代换法、开路法和应急修理法等。 一、温度法 温度法就是通过摸一些元器件的表面&#xff0c;判断该元器件的温度是否过高&#xff0c;以此确定故障原因…

长虹变频空调室外机电路电路分析与故障检修

长虹室外机电路由电源电路、微处理器电路、室外风扇电机驱动电路、压缩机驱动电路等构成 1. 供电电路室外机供电电路主要产生300V电压和12V电压。300V供电电路由限流电阻PTC501、桥式整流堆、滤波电容构成&#xff0c;而12V电源由功率模块电路板上的开关电源产生&#xff0c;如…