Go语言判断接口的具体类型并进行类型转换

Go语言判断接口具体类型的方法

1. 方法1

使用反射方法reflect.TypeOf(v interface{}).String()得到以字符串表达的具体类型。

2. 方法2

使用fmt.Printf("%T", v)打印出具体类型。或者使用fmt.Sprintf("%T", v)返回一个字符串。

3. 方法3

自定义一个函数judgeType(v interface{}) string来返回具体类型。
judgeType()函数如下。

func judgeType(v interface{}) string {
	switch i := v.(type) {
	case int:
		return "int"
	case int64:
		return "int 64"
	case int32:
		return "int32"
	case string:
		return "string"
	case float64:
		return "float64"
	default:
		_ = i
		return "unknown"
	}
}

4. 转成具体类型

先对其类型进行判断,再用类型断言进行转换。

//获取到具体的类型,可能是string类型或者float64
//其中dataQuery.Start 和 dataQuery.End 都是interface{}类型
	start := reflect.TypeOf(dataQuery.Start).String()
	end := reflect.TypeOf(dataQuery.End).String()

	var startTime float64
	var endTime float64
	if start == "string" {
		//使用类型断言转成具体类型
        startTimeStr:= dataQuery.End.(string)
	} else if start == "float64" {
		//使用类型断言转成具体类型
		startTime = dataQuery.Start.(float64)
	}

	if end == "string" {
		//使用类型断言转成具体类型
		endTimeStr:= dataQuery.End.(string)

		//调用相对转绝对的函数 parseRelativeTime(relative string) float64
		endTime = parseRelativeTime(endTimeStr)

	} else if end =="float64" {
		//使用类型断言转成具体类型
		endTime = dataQuery.Start.(float64)
		fmt.Printf("%d", endTime)
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值