从reflect.Type中删除指针

时间:2018-06-26 17:58:03

标签: go reflection

我有一个reflect.Type,其中包含结构的双指针。我希望能够删除一个间接级别以具有指向该结构的指针。这可能吗?例如,我想这样做:

func foo(x interface{}) {
    typ := reflect.TypeOf(x)
    fmt.Printf("%v", typ) // prints **Foo
    realType := typ.PointsTo()
    fmt.Printf("%v", typ) // prints *Foo
}

但是据我所知,此功能不存在。有一个Indirect可以在Value上运行的功能,但是我看不到在Type上可以运行的类似功能。

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找Type.Elem()

  

Elem返回类型的元素类型。

对于指针,“元素类型”是指针指向的类型。

func foo(x interface{}) {
    typ := reflect.TypeOf(x)
    fmt.Printf("%v", typ) // prints **Foo
    realType := typ.Elem()
    fmt.Printf("%v", realType) // prints *Foo
}

游乐场:https://play.golang.org/p/7Vx58ASPZQz