I have the following code:
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 {}
我该如何获取其基础类型?我想检查数组类型是否为interface{}类型。
编辑
一种实现它的丑陋方式是:var t []interface{}
fmt.Println("Type ->>", elm, " - ", valType.Elem(), " --- ", reflect.TypeOf(t) == valType.Elem())
有没有其他方法可以实现?
[]interface{}
,因此底层类型是interface{}
。这意味着它可以包含任何内容。如果您想要每个元素的底层类型,您需要为每个元素进行检查。 - Not_a_Golferinterface{}
类型的reflect
对象,除了像你现在这样使用它的实例。也许可以避免使用reflect
:通过一个var ifc interface{}
,它可能表示一个*[]interface{}
或一个*[]Foo
,你总是可以执行_, ok := ifc.(*[]interface{})
并检查ok
以查看是否正确获取了类型,或者进行类型开关(请查看规范)。此外,请注意,切片已经包含指向数据的指针,因此您很少需要切片指针。 - twotwotwo