golang用type-switch判断interface的实际存储类型


Posted in Golang onApril 14, 2022

用type-switch判断interface的实际存储类型

在go语言中,interface很好用,但是往往我们无法确定interface里存储的到底是什么类型,而且go又是强类型语言。

type-switch就刚好帮我解决了这个问题

//例子
var s interface{}
switch s.(type) {
case string:
        fmt.println("这是一个string类型的变量")
case int64:
        fmt.println("这是一个你int64类型的变量")
default:
        fmt.println("以上类型都不是")
}
//另外如果只是单纯的想知道变量的类型,可以使用reflect.typeof()
val := "abcdefg123"
fmt.println(reflect.typeof(val))        //打印结果:string
beego.Debug(reflect.typeof(val))    //Debug打印结果:string

golang任何类型interface{}

golang中可以使用interface{}表示任何类型。

本文以例子的形式,演示interface{}的使用。

example1

package main
import (
        "fmt"
)
func main() {
        var t1 interface{} = 2
        v, ok := t1.(int)
        if ok {
                fmt.Println("int:", v)
        } else {
                fmt.Println("v:", v)
        }
}

output:

$ ./test
int: 2

判断interface的类型,如果是int型,就输出接口表示的值。

有时,如果确定知道类型T(例如int),会直接使用如下方式进行断言:

v := t1.(int)

但断言失败,会panic。可根据具体情况选择使用哪种方式。

example2

package main
import (
        "fmt"
)
func main() {
        var t1 interface{} = "abc"
        switch v := t1.(type) {
        case int:
                fmt.Println("int:", v)
        case string:
                fmt.Println("string:", v)
        default:
                fmt.Println("unknown type:", v)
        }
}

如果t1为abc:

output:

$ ./test
string: abc

如果t1为23:

output:

$ ./test
int: 23

如果t1为1.2

output:

$ ./test
unknown type: 1.2

Golang 相关文章推荐
go语言map与string的相互转换的实现
Apr 07 Golang
Go语言-为什么返回值为接口类型,却返回结构体
Apr 24 Golang
golang中的空slice案例
Apr 27 Golang
goland设置颜色和字体的操作
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
Go语言基础知识点介绍
Jul 04 Golang
Go语言grpc和protobuf
Apr 13 Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 Golang
golang生成并解析JSON
Apr 14 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 Golang
实现GO语言对数组切片去重
Apr 20 Golang
GoFrame框架数据校验之校验结果Error接口对象
Jun 21 Golang
golang语言指针操作
Apr 14 #Golang
golang使用map实现去除重复数组
Apr 14 #Golang
golang生成并解析JSON
Apr 14 #Golang
Go语言 详解net的tcp服务
Apr 14 #Golang
golang连接MySQl使用sqlx库
Apr 14 #Golang
Go语言安装并操作redis的go-redis库
Apr 14 #Golang
golang操作redis的客户端包有多个比如redigo、go-redis
Apr 14 #Golang
You might like
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
JS event使用方法详解
2008/04/28 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
详解Vue生命周期的示例
2017/03/10 Javascript
canvas基础绘制-绚丽倒计时的实例
2017/09/17 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
2020/07/22 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
python输入多行字符串的方法总结
2019/07/02 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
女大学生毕业找工作的自我评价
2013/10/03 职场文书
微信营销策划方案
2014/02/24 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
求职自我评价范文
2015/03/09 职场文书
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python