news 2026/9/27 21:55:55

Go 空接口 type-switch 详解|any 和 interface {} 异同,非侵入式接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go 空接口 type-switch 详解|any 和 interface {} 异同,非侵入式接口

前言

空接口interface{}可以接收任意类型,type switch 专门用来判断空接口内部保存的动态类型,很多同学容易把它和类型断言混淆。

一、type switch 完整案例

题目要求:编写 Describe 函数,接收 any 类型参数,判断底层类型并按格式输出。

package main import "fmt" // any等价于interface{},可以接收任意类型数据 func Describe(v any) { // type switch固定语法,专门获取接口变量里面的动态类型 switch val := v.(type) { case int: fmt.Printf("This is an integer with value %d.\n", val) case string: fmt.Printf("This is a string: '%s'.\n", val) case float64: fmt.Printf("This is a float with value %g.\n", val) default: fmt.Println("Unknown type!") } } func main() { Describe(100) Describe("hello go") Describe(3.14) Describe(true) }

输出结果

This is an integer with value 100. This is a string: 'hello go'. This is a float with value 3.14. Unknown type!

重要知识点:v.(type)只能写在 switch 里面,不能单独拿出来使用,这是 type switch 专属语法。和类型断言v.(int)区分开。

简答题 1:Go 接口实现为什么是非侵入式?

Go 语言没有implements关键字,不需要显式声明某个类型实现了某个接口。只要一个类型拥有接口定义的全部方法,编译器会自动判定该类型实现了这个接口。 不需要修改原有结构体的代码去添加实现声明,类型和接口之间没有强耦合,所以称为非侵入式接口。

简答题 2:interface{}和 any 的异同

相同点:any本质就是interface{}的别名,源码定义type any = interface{},底层完全一样。 不同点:

  1. any 是 Go1.18 引入泛型之后新增的别名,主要用于泛型约束;
  2. interface{}是传统写法,多用于普通函数接收任意类型参数,搭配 type switch、类型断言。

运行时两者没有任何差别,只是开发编码习惯不同。

常见踩坑

  1. type switch 里面 case 写的是类型,不是变量。
  2. 空接口变量存储的包含两部分:动态类型 + 动态值。
  3. 非侵入式只关心方法集合,不关心类型有没有声明实现接口。

小结

  1. type switch 用于判断空接口存储的动态类型;普通类型断言用于单独判断某一种类型。
  2. Go 接口隐式实现,非侵入式,不存在 implements 关键字。
  3. any 就是 interface {} 别名,泛型场景推荐写 any,普通场景两种写法都可以。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/27 21:55:48

昆明关键词优化软件速查手册:3步解决代码报错与布局陷阱

昆明关键词优化软件速查手册:3步解决代码报错与布局陷阱 很多昆明本地做外贸站或本地服务的老板,拿着预算想找个“昆明关键词优化软件”一键搞定排名,结果下载了一堆工具,页面报错、布局错乱,SEO数据反而跌了。你是不是也卡在这一步:自己不会代码想做网站,但买的工具生成的页面在手机上全是乱码,或者核心关键词…

作者头像 李华
网站建设 2026/9/27 21:55:37

网站开发策划是干嘛的?新手入门必看避坑指南

网站开发策划是干嘛的?新手入门必看避坑指南 网站做好了没人访问,这几乎是所有中小企业老板最头疼的噩梦。你花了大几万,找外包公司做了一套官网,页面挺花哨,加载也挺快,结果上线三个月,后台统计显示访客数只有个位数。别急着骂外包公司,很多时候问题出在源头—— 网站开发策划…

作者头像 李华
网站建设 2026/9/27 21:55:16

拒绝烂模板!图解步骤搞定可以直接进入网站的正能量连接安全

拒绝烂模板!图解步骤搞定可以直接进入网站的正能量连接安全 别再盯着那些千篇一律、丑得让人想砸键盘的模板网站了。我知道,很多新手刚入行,手里没资源,只能去网上扒几个免费的开源模板凑合用。结果呢?代码里全是注释掉的垃圾代码,样式错乱,更可怕的是,这种“拿来主义”往往伴随着巨大的安全隐患。很多所谓的“正能…

作者头像 李华
网站建设 2026/9/27 21:54:28

OpCore Simplify 完整指南:一键生成 OpenCore EFI 快速上手

OpCore Simplify 完整指南:一键生成 OpenCore EFI 快速上手 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在对着几百行的 config.plis…

作者头像 李华
网站建设 2026/9/27 21:54:09

政务网站建设规范对比评测:避开3大高价陷阱

政务网站建设规范对比评测:避开3大高价陷阱 找建站公司最怕什么?不是功能少,而是被坑高价。很多创业团队负责人拿着预算去谈政务项目,对方张口就是“定制化”“高并发”,报价直接翻三倍。你心里没底,只能硬着头皮签,最后发现所谓的高端配置,不过是把开源CMS换了个皮,后台操作比老系统还卡。这种信息差,就是利…

作者头像 李华
网站建设 2026/9/27 21:53:42

网站每天点击量多少好?这份保姆级建站教程里的数据真相

网站每天点击量多少好?这份保姆级建站教程里的数据真相 域名服务器搞不懂,很多老板建站第一步就卡壳了。别急,这篇保姆级建站教程直接给你拆解“网站每天点击量多少好”这个核心问题。咱们不整虚的,直接看数据,看怎么把流量变成真金白银。 运营目标与指标:别只盯着PV,要看UV和转化…

作者头像 李华