我想将一片 []int64 转换为 []uint64,什么是最有效和优雅的方式?我只知道以下方式:func convert(userIDs ...int64) []uint64 { uIDs := make([]uint64, len(userIDs)) for index, uID := range userIDs { uIDs[index] = uint64(uID) } fmt.Printf("%T, %v\n", uIDs, uIDs) return uIDs}
2 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
如果不诉诸不安全,您就无法避免循环:
b := make([]uint64, len(a))
for i, v := range a {
b[i] = uint64(v)
}
有关更多信息/示例,请参阅此问题或此问题。如果您真的想使用unsafe,那么b := *(*[]uint64)(unsafe.Pointer(&a))它会起作用(但我不建议您使用它,除非您有令人信服的理由这样做)。
慕斯709654
TA贡献1840条经验 获得超5个赞
正如 Birits 所回答的,只有一种方法可以将一个切片转换为另一个切片。
除非您正在寻找强制转换方法:
1) unsafe.Pointer cast*(*[]uint64)(unsafe.Pointer(&int64_slice))
2) 使用链接名编译指示编辑过的签名重新导入:
//go:linkname convert convert.Slice
func convert(userIDs []int64) []int64 {
return userIDs
}
//go:linkname ConvertSliceInt64ToUInt64 convert.Slice
func ConvertSliceInt64ToUInt64(userIDs ...int64) []uint64
https://play.golang.org/p/8b-yVL_Ps-c
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消