go - 如何判断对象是否为复合(类型)
问题描述
例如, x interface{}
给出。如果它是复合类型(结构或指向结构的指针)或“简单”类型,如string
, int
,float
等,如何确定(可能使用反射)?
解决方案
你可以使用 package reflect
,获取它的类型,然后检查它的种类。如果它是指针类型,则“导航”到指向的类型:
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