我尝试在我的porogram查找方法中使用interface{}
作为特定函数的参数,将beetwen类型指针解析为指向单个对象的数组表单指针。在这个时候,我使用以下方式得到这个结果:
func object( v interface{}) {
if strings.HasPrefix(reflect.TypeOf(v).String(), "*[]") {
// pointer to array
} else {
// pointer to single object
}
}
以上方式有效,但对我来说这不是干净的代码。我认为存在一些更好的方法来解决这个使用golang包作为类型,反映但现在我不是没有如此请你的建议。
聚苯乙烯。我不想使用switch
statemet例如:
switch v.(type){
case *[]someType:
// array
default:
// single object
}
这应该更通用,不依赖于数组的类型对象
答案 0 :(得分:2)
使用reflect.Kind
检查您拥有的价值类型:
func object(i interface{}) {
v := reflect.ValueOf(i)
switch v.Kind() {
case reflect.Ptr:
fmt.Print("we have a pointer ")
switch v.Elem().Kind() {
case reflect.Slice:
fmt.Println("to a slice")
case reflect.Array:
fmt.Println("to an array")
case reflect.Struct:
fmt.Println("to a struct")
default:
fmt.Println("to unexpected type ", v.Elem().Kind())
}
}
}