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 interface判断为空nil的实现代码
Apr 24 Golang
用golang如何替换某个文件中的字符串
Apr 25 Golang
go语言求任意类型切片的长度操作
Apr 26 Golang
Go语言带缓冲的通道实现
Apr 26 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang 实现两个结构体复制字段
Apr 28 Golang
goland设置颜色和字体的操作
May 05 Golang
golang日志包logger的用法详解
May 05 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
Go语言grpc和protobuf
Apr 13 Golang
Go语言测试库testify使用学习
Jul 23 Golang
Python测试框架pytest核心库pluggy详解
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
php图片加中文水印实现代码分享
2012/10/31 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
2019/10/12 PHP
juqery 学习之三 选择器 层级 基本
2010/11/25 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
jQuery创建及操作xml格式数据示例
2018/05/26 jQuery
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
Python的垃圾回收机制深入分析
2014/07/16 Python
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python实现快速傅里叶变换的方法(FFT)
2018/07/21 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python何时应该使用Lambda函数
2019/07/02 Python
python获取命令行参数实例方法讲解
2020/11/02 Python
10种CSS3实现的loading动画,挑一个走吧?
2020/11/16 HTML / CSS
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
学年自我鉴定
2014/01/16 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
国际贸易专业求职信
2014/06/04 职场文书
导航工程专业自荐信
2014/09/02 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
导游词之四川武侯祠
2019/10/21 职场文书
Java实现简易的分词器功能
2021/06/15 Java/Android
MySQL之select、distinct、limit的使用
2021/11/11 MySQL