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语言-在mac下brew升级golang
Apr 25 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
golang 生成对应的数据表struct定义操作
Apr 28 Golang
Golang 空map和未初始化map的注意事项说明
Apr 29 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
Golang 如何实现函数的任意类型传参
Apr 29 Golang
Golang之sync.Pool使用详解
May 06 Golang
go语言中http超时引发的事故解决
Jun 02 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Golang 实现WebSockets
Apr 24 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go语言编译原理之变量捕获
Aug 05 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
基于mysql的论坛(4)
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
php minixml详解
2008/07/19 PHP
jQuery 源码分析笔记
2011/05/25 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Python中生成Epoch的方法
2017/04/26 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
python实现石头剪刀布程序
2021/01/20 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python中使用np.delete()的实例方法
2021/02/01 Python
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
公务员职务工作的自我评价
2013/11/01 职场文书
美术国培研修感言
2014/02/12 职场文书
聚美优品的广告词
2014/03/14 职场文书
模具专业自荐信
2014/05/29 职场文书
理财学专业自荐书
2014/06/28 职场文书
学习心得体会
2019/06/20 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书