我想将[] 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
}
b := make([]uint64, len(a))
for i, v := range a {
b[i] = uint64(v)
}
有关更多信息/示例,请参见this question或this one。如果您真的想使用unsafe,那么b := *(*[]uint64)(unsafe.Pointer(&a))
可以使用(但是除非有充分的理由,否则我不建议您使用它)。
只有一种方法可以将切片转换为另一切片,正如Birits回答的那样。
除非您正在寻找强制转换方法:
1)不安全。指针强制转换为*(*[]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