-5

我想实现一种将interface{}切片转换interface{}为与给定切片长度相等的数组的方法。它类似于下面:

func SliceToArray(in []interface{}) (out interface{}) {
 ...
}
// out's type is [...]interface{} and len(out)==len(in)

我怎样才能实现这个方法?

编辑:有没有可能用来reflect.ArrayOf实现这个?

4

1 回答 1

0

使用reflect.ArrayOf创建给定切片元素类型的数组类型。使用reflect.New创建该类型的值。使用reflect.Copy从切片复制到数组。

func SliceToArray(in interface{}) interface{} {
    s := reflect.ValueOf(in)
    if s.Kind() != reflect.Slice {
        panic("not a slice")
    }
    t := reflect.ArrayOf(s.Len(), s.Type().Elem())
    a := reflect.New(t).Elem()
    reflect.Copy(a, s)
    return a.Interface()
}

在操场上运行

此函数对于从切片和其他需要可比较值的场景创建映射键很有用。否则,当长度可以是任意的时,通常最好使用切片。

于 2019-01-22T19:13:13.967 回答