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)
}