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())
}
}
The output is the following one: Type ->> <[]interface {} Value> - []interface {}
How can I get the underlying type of it? I would like to check if array type is of interface{} kind.
EDIT One way to achieve it, an ugly way IMHO is this one:
var t []interface{}
fmt.Println("Type ->>", elm, " - ", valType.Elem(), " --- ", reflect.TypeOf(t) == valType.Elem())
Can it be done in a different way?
Let us assume the we have
v := make([]Foo, 0)
.
How to get theFoo
type and not[]Foo
?
As you have found out, valType.Elem().Elem()
can work, in your case where you are using a slice pointer.
But for a regular slice, as in "golang reflect value kind of slice", this would be enough:
typ := reflect.TypeOf(<var>).Elem()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With