我需要检查interface {}是否是一个数组并创建相应的slice(如果是)。不幸的是我不提前知道数组长度。
例如:
import (
"reflect"
)
func AnythingToSlice(a interface{}) []interface{} {
rt := reflect.TypeOf(a)
switch rt.Kind() {
case reflect.Slice:
slice, ok := a.([]interface{})
if ok {
return slice
}
// it works
case reflect.Array:
// return a[:]
// it doesn't work: cannot slice a (type interface {})
//
array, ok := a.([reflect.ValueOf(a).Len()]interface{})
// :-((( non-constant array bound reflect.ValueOf(a).Len()
if ok {
return array[:]
}
}
return []interface{}(a)
}
答案 0 :(得分:2)
类型断言中需要显式类型。该类型不能通过反射构建。
除非参数是[] interface {},否则必须复制切片或数组以生成[]接口{}。
试试这个:
2^N-1