例如,给出x interface{}
。如果它是复合类型(结构或指向结构的指针)或“简单”类型(如string
,int
,float
等),如何确定(也许使用反射)? / p>
答案 0 :(得分:3)
您可以使用软件包reflect
,获取其类型并检查其kind。如果是指针类型,则“导航”到指针类型:
func isStruct(i interface{}) bool {
t := reflect.TypeOf(i)
if t.Kind() == reflect.Ptr {
t = t.Elem()
}
return t.Kind() == reflect.Struct
}
测试:
fmt.Println(isStruct("text"))
fmt.Println(isStruct(1))
fmt.Println(isStruct(image.Point{}))
fmt.Println(isStruct(&image.Point{}))
输出(在Go Playground上尝试):
false
false
true
true