将 []int64 转换为 []uint64 的最佳方法是什么



我想将 []int64 的一部分转换为 []uint64,最有效和优雅的方法是什么?我只知道以下方式:

func convert(userIDs ...int64) []uint64 {
uIDs := make([]uint64, len(userIDs))
for index, uID := range userIDs {
uIDs[index] = uint64(uID)
}
fmt.Printf("%T, %vn", uIDs, uIDs)
return uIDs
}

如果不诉诸不安全,你就无法避免循环:

b := make([]uint64, len(a))
for i, v := range a {
b[i] = uint64(v)
}

有关更多信息/示例,请参阅此问题或此问题。如果你真的想使用不安全,那么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

https://play.golang.org/p/8b-yVL_Ps-c

相关内容

最新更新