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

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

    • 1. 方法1
    • 2. 方法2
    • 3. 方法3
    • 4. 转成具体类型

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

你可能感兴趣的:(Golang学习,笔记,go语言,类型断言,接口具体类型,接口类型具体化)