我有以下代码:
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())
可以用不同的方式完成吗?
答案 0 :(得分:2)
让我们假设我们有
v := make([]Foo, 0)
。
如何获取Foo
类型而不是[]Foo
类型?
您发现,在使用切片 pointer 的情况下,valType.Elem().Elem()
可以工作。
但是对于常规切片,例如“ golang reflect value kind of slice”,就足够了:
typ := reflect.TypeOf(<var>).Elem()