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日志包logger的用法详解
May 05 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
修改并编译golang源码的操作步骤
Jul 25 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
Go语言基础切片的创建及初始化示例详解
Nov 17 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang MatrixOne使用介绍和汇编语法
Apr 19 Golang
Go gRPC进阶教程gRPC转换HTTP
Jun 16 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
给ECShop添加最新评论
2015/01/07 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
js图片放大镜效果实现方法详解
2020/10/28 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
JS使用Dijkstra算法求解最短路径
2019/01/17 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
go语言计算两个时间的时间差方法
2015/03/13 Python
python网络编程之文件下载实例分析
2015/05/20 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
师范应届毕业生自荐信
2013/11/18 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
滴水洞导游词
2015/02/10 职场文书
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
PC版《死亡搁浅导剪版》现已发售 展开全新的探险
2022/04/03 其他游戏
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python
Nginx静态压缩和代码压缩提高访问速度详解
2022/05/30 Servers