in gotype/fold.go [120:143]
func getFoldConvert(v interface{}) (interface{}, foldFn) {
t := reflect.TypeOf(v)
cast := false
switch t.Kind() {
case reflect.Map:
if cast = t.Name() != ""; cast {
mt := reflect.MapOf(t.Key(), t.Elem())
v = reflect.ValueOf(v).Convert(mt).Interface()
}
case reflect.Slice:
if cast = t.Name() != ""; cast {
mt := reflect.SliceOf(t.Elem())
v = reflect.ValueOf(v).Convert(mt).Interface()
}
case reflect.Array:
if cast = t.Name() != ""; cast {
mt := reflect.ArrayOf(t.Len(), t.Elem())
v = reflect.ValueOf(v).Convert(mt).Interface()
}
}
return v, getFoldGoTypes(v)
}