Go 类型查询

我们知道interface的变量里面可以存储任意类型的数值(该类型实现了interface)。那么我们怎么反向知道这个变量里面实际保存了的是哪个类型的对象呢?目前常用的有两种方法:

  • comma-ok断言
  • switch测试

一、comma-ok断言

Go语言里面有一个语法,可以直接判断是否是该类型的变量:value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。

如果element里面确实存储了T类型的数值,那么ok返回true,否则返回false。

func main() {
	// 空接口类型的切片
	var i interface{}
	i = 10.1
	value, ok := i.(int)
	if ok {
		fmt.Println("整型数据", value)
	} else {
		fmt.Println("非整型数据", value)
	}
}

非整型数据 0
func main() {
	var i []interface{}

	i = append(i, 10, 3.14, "aaa")

	for _, v := range i {
		if data, ok := v.(int); ok {
			fmt.Println("整型数据:", data)
		} else if data, ok := v.(float64); ok {
			fmt.Println("浮点型数据:", data)
		} else if data, ok := v.(string); ok {
			fmt.Println("字符串数据:", data)
		} else if data, ok := v.(func()); ok {
			//函数调用
			data()
		}
	}

}

如果这个i中有v.(int)也就是int类型的数值就返回打印出来。

二、switch测试

var i []interface{}

i = append(i, 10, 3.14, "aaa", demo15)

for _,data := range i{
    switch value:=data.(type) {
    case int:
        fmt.Println("整型",value)
    case float64:
        fmt.Println("浮点型",value)
    case string:
        fmt.Println("字符串",value)
    case func():
        fmt.Println("函数",value)
    }
}

这个也是一样的道理只不过是用了另外一种方法,data也就是里面的值,如果里面的值类型是int的话就打印出来这个值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季布,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值