2 回答
TA贡献1757条经验 获得超8个赞
使用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()
}
此函数对于从切片和其他需要可比较值的场景创建映射键很有用。否则,通常最好在长度可以任意时使用切片。
TA贡献1864条经验 获得超2个赞
通过CL 430415、428938 ( type
)、430475 ( reflect
)和429315 ( )解决spec
从切片到数组或数组指针的转换
将切片转换为数组会生成一个包含切片底层数组元素的数组。
类似地,将切片转换为数组指针会产生指向切片底层数组的指针。
在这两种情况下,如果切片的长度小于数组的长度,就会发生运行时恐慌。
s := make([]byte, 2, 4)
a0 := ([0]byte)(s)
a1 := ([1]byte)(s[1:]) // a1[0] == s[1]
a2 := ([2]byte)(s) // a2[0] == s[0]
a4 := ([4]byte)(s) // panics: len([4]byte) > len(s)
- 2 回答
- 0 关注
- 176 浏览
添加回答
举报