golang switch v := data.(type)

news/2024/10/30 8:07:47/

switch v := data.(type) 语句中,case 后面的类型是用来匹配 data 的实际类型,而不是匹配 v 的值。这里的类型匹配是在运行时进行的。

让我通过一个例子详细解释:

func explainTypeSwitch(data interface{}) {// 这里的 data.(type) 是获取 data 的实际类型// v 只是一个变量,用于在各个 case 中使用对应类型的值switch v := data.(type) {case int:// case int 匹配的是 data 的类型是否为 int// 如果匹配成功,v 会被自动转换为 int 类型fmt.Printf("data 的类型是 int,v 的值是 %v\n", v)case string:// case string 匹配的是 data 的类型是否为 string// 如果匹配成功,v 会被自动转换为 string 类型fmt.Printf("data 的类型是 string,v 的值是 %v\n", v)default:fmt.Printf("未知类型:%T\n", v)}
}func main() {var x interface{} = 42explainTypeSwitch(x)  // 输出:data 的类型是 int,v 的值是 42x = "hello"explainTypeSwitch(x)  // 输出:data 的类型是 string,v 的值是 hello
}

关键点说明:

  1. data.(type) 是一个特殊的语法,只能在 switch 语句中使用
  2. case 后面的类型是用来匹配 data 的实际类型
  3. v 是一个变量,它会在每个 case 中自动获取对应类型的值
  4. 你也可以省略变量 v,直接写成 switch data.(type),如果你不需要使用这个值:
switch data.(type) {
case int:fmt.Println("It's an integer")
case string:fmt.Println("It's a string")
}

也可以在一个 case 中匹配多个类型:

switch v := data.(type) {
case int, int32, int64:fmt.Printf("是整数类型:%v\n", v)
case string, []byte:fmt.Printf("是字符相关类型:%v\n", v)
}

记住:case 后面的类型声明始终是用来匹配 data 的类型,而不是 v 的值。这种类型匹配是 Go 语言提供的一种在运行时进行类型检查的机制。


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

相关文章

安装双系统后ubuntu无法联网(没有wifi标识)网卡驱动为RTL8852BE

安装双系统后ubuntu没有办法联网,(本篇博客适用的版本为ubuntu20.04)且针对情况为无线网卡驱动未安装的情况 此时没有网络,可以使用手机数据线连接,使用USB共享网络便可解决无法下载的问题。 打开终端使用命令lshw -C …

PART 1 数据挖掘概论 — 数据挖掘方法论

目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…

CSP/信奥赛C++刷题训练:经典前缀和例题(2):洛谷P6568:水壶

CSP/信奥赛C刷题训练:经典前缀和例题(2) [NOI Online #3 提高组] 水壶 题目描述 有 n n n 个容量无穷大的水壶,它们从 1 ∼ n 1\sim n 1∼n 编号,初始时 i i i 号水壶中装有 A i A_i Ai​ 单位的水。 你可以进行…

【SSM详细教程】-14-SpringAop超详细讲解

精品专题: 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

手机备忘录怎么导出到电脑,

在忙碌的现代生活中,我们常常需要在手机和电脑之间切换工作,手机里的备忘录记录了我们的重要事项,有时候需要在电脑端查看和处理。那么,如何将手机备忘录的内容导出到电脑呢?其实,这个问题的解决方法并不复…

踩坑:关于使用ceph pg repair引发的业务阻塞

概述 在某次故障回溯中,发现引发集群故障,slow io,pg stuck的罪魁祸首竟是做了一次ceph pg repair $pgid。然而ceph pg repair作为使用频率极高的,用来修复pg不一致的常用手段,平时可能很少注意其使用规范和可能带来的…

Uniapp使用UviewPlus在APP当中进行文件上传的解决方案

Uniapp使用UviewPlus在APP当中进行文件上传的解决方案 吐槽:真的可以不用就不要用uniapp,就像s一样,可以的话上Recat好很多,踩了很多坑。 原因 如果你是axios的忠实奴隶那么你会遇到第一个坑,就是uniapp下的原生编译不…

Rust 程序设计语言学习——高级特性

RUST 中常用部分学习结束之后,我们来接触一些 RUST 中的其他高级用法。 不安全 Rust:用于当需要舍弃 Rust 的某些保证并负责手动维持这些保证高级 trait:与 trait 相关的关联类型,默认类型参数,完全限定语法&#xff…