反映切片底层类型

时间:2014-06-23 13:13:47

标签: go reflection slice

我有以下代码:

v: = &[]interface{}{client, &client.Id}
valType := reflect.TypeOf(v)
val := reflect.ValueOf(v)
if val.Kind() == reflect.Ptr {
        elm := val.Elem()
        if elm.Kind() == reflect.Slice {
            fmt.Println("Type ->>", elm, " - ", valType.Elem())
        }
    }

输出如下:Type ->> <[]interface {} Value> - []interface {} 我怎样才能得到它的基础类型?我想检查数组类型是否为接口{}种。

修改 实现它的一种方法,一种丑陋的方式恕我直言这是:

var t []interface{}
fmt.Println("Type ->>", elm, " - ", valType.Elem(), " --- ", reflect.TypeOf(t) == valType.Elem())

可以用不同的方式完成吗?

1 个答案:

答案 0 :(得分:2)

  

让我们假设我们有v := make([]Foo, 0)
  如何获取Foo类型而不是[]Foo类型?

您发现,在使用切片 pointer 的情况下,valType.Elem().Elem()可以工作。

但是对于常规切片,例如“ golang reflect value kind of slice”,就足够了:

typ := reflect.TypeOf(<var>).Elem()