Arrays 如何将切片转换为数组?
我想实现一个方法,将接口{}片转换为与给定片长度相等的接口{}数组。它类似于以下内容: func SliceToArrayin[]接口{}输出接口{}{ ... } //out的类型是[…]接口{},lenout==lenin 如何实现此方法 编辑: 是否有可能使用reflect.ArrayOf来实现此功能 用于创建给定切片元素类型的数组类型。用于创建该类型的值。用于从切片复制到阵列Arrays 如何将切片转换为数组?,arrays,go,slice,reflect,Arrays,Go,Slice,Reflect,我想实现一个方法,将接口{}片转换为与给定片长度相等的接口{}数组。它类似于以下内容: func SliceToArrayin[]接口{}输出接口{}{ ... } //out的类型是[…]接口{},lenout==lenin 如何实现此方法 编辑: 是否有可能使用reflect.ArrayOf来实现此功能 用于创建给定切片元素类型的数组类型。用于创建该类型的值。用于从切片复制到阵列 func SliceToArray(in interface{}) interface{} { s :=
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,我想使用一个数组,其中包含切片中的所有元素作为键,大小尽可能小。如果需要将贴图键设置为长度不一致的数组,你可能想重新考虑导致这种情况的设计。