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语言求任意类型切片的长度操作
Apr 26 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
对Golang中的FORM相关字段理解
May 02 Golang
golang 实现Location跳转方式
May 02 Golang
Golang的继承模拟实例
Jun 30 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang 实现 WebSockets 之创建 WebSockets
Apr 24 Golang
Go调用Rust方法及外部函数接口前置
Jun 14 Golang
go goth封装第三方认证库示例详解
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 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
两种php给图片加水印的实现代码
2020/04/18 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
JS实现简单的Canvas画图实例
2013/07/04 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
Vue项目服务器部署之子目录部署方法
2019/05/12 Javascript
node后端服务保活的实现
2019/11/10 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
2020/05/01 Javascript
Vue 中如何将函数作为 props 传递给组件的实现代码
2020/05/12 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
2020/08/03 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
python执行外部程序的常用方法小结
2015/03/21 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
软件工程师面试题
2012/06/25 面试题
学前教育求职自荐信范文
2013/12/25 职场文书
技校毕业生的自我评价
2013/12/27 职场文书
活动总结报告格式
2014/05/09 职场文书
扶贫办主任查摆“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
抗洪救灾标语
2014/10/08 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
志愿服务心得体会
2016/01/15 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
python程序的组织结构详解
2021/12/06 Python