反射切片基础类型



我有以下代码:

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 {}我如何获得它的基本类型?我想检查数组类型是否属于接口{}类型。

编辑实现这一目标的一种方法,IMHO的一种丑陋方法是:

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

可以用不同的方式吗?

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

正如您所发现的,在您使用切片指针的情况下,valType.Elem().Elem()可以工作。

但对于一个常规切片,如"golang反射值的切片",这就足够了:

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

最新更新