Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将切片转换为数组?_Arrays_Go_Slice_Reflect - Fatal编程技术网

Arrays 如何将切片转换为数组?

Arrays 如何将切片转换为数组?,arrays,go,slice,reflect,Arrays,Go,Slice,Reflect,我想实现一个方法,将接口{}片转换为与给定片长度相等的接口{}数组。它类似于以下内容: func SliceToArrayin[]接口{}输出接口{}{ ... } //out的类型是[…]接口{},lenout==lenin 如何实现此方法 编辑: 是否有可能使用reflect.ArrayOf来实现此功能 用于创建给定切片元素类型的数组类型。用于创建该类型的值。用于从切片复制到阵列 func SliceToArray(in interface{}) interface{} { s :=

我想实现一个方法,将接口{}片转换为与给定片长度相等的接口{}数组。它类似于以下内容:

func SliceToArrayin[]接口{}输出接口{}{ ... } //out的类型是[…]接口{},lenout==lenin 如何实现此方法

编辑: 是否有可能使用reflect.ArrayOf来实现此功能

用于创建给定切片元素类型的数组类型。用于创建该类型的值。用于从切片复制到阵列

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()
}

此函数用于从切片和其他需要可比较值的场景创建贴图关键点。否则,通常最好在长度可以任意的情况下使用切片。

这是一个非常不寻常的、可能毫无意义的实现-您能描述一下您实际想要实现的目标吗?可能有更好的方法,很可能只是正常使用切片。实际上,我想使用不确定的切片作为贴图的键,因为切片不可Capamerable,我想使用一个数组,其中包含切片中的所有元素作为键,大小尽可能小。如果需要将贴图键设置为长度不一致的数组,你可能想重新考虑导致这种情况的设计。