如何从指针到单个对象重新指向数组的指针

时间:2016-12-01 22:17:10

标签: arrays pointers go

我尝试在我的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
}

这应该更通用,不依赖于数组的类型对象

1 个答案:

答案 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())
        }
    }
}

https://play.golang.org/p/q32Cfz_dmF