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 相关文章推荐
Golang 正则匹配效率详解
Apr 25 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
go结构体嵌套的切片数组操作
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
golang 在windows中设置环境变量的操作
Apr 29 Golang
golang elasticsearch Client的使用详解
May 05 Golang
Golang 实现获取当前函数名称和文件行号等操作
May 08 Golang
golang操作rocketmq的示例代码
Apr 06 Golang
Golang jwt身份认证
Apr 20 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Go语言编译原理之源码调试
Aug 05 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
jquery模拟按下回车实现代码
2011/09/20 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
jquery实现的淡入淡出下拉菜单效果
2015/08/25 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
2016/01/08 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
Python如何import文件夹下的文件(实现方法)
2017/01/24 Python
Python将DataFrame的某一列作为index的方法
2018/04/08 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
泰国网上购物:Shopee泰国
2018/09/14 全球购物
加拿大最大的体育用品、鞋类和服装零售商:Sport Chek
2018/11/29 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
历史系自荐信范文
2013/12/24 职场文书
50岁生日感言
2014/01/23 职场文书
建筑安全责任书范本
2014/07/24 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
员工2014年度工作总结
2014/12/09 职场文书
公务员年度考核登记表个人总结
2015/02/12 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
2016新年感言
2015/08/03 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS