为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
不负相思意 2022-05-18 10:36:13
我想将一片 []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))它会起作用(但我不建议您使用它,除非您有令人信服的理由这样做)。


查看完整回答
反对 回复 2022-05-18
?
慕斯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


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信