将[]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, %v\n", uIDs, uIDs)

    return uIDs

}


不负相思意
浏览 110回答 2
2回答

炎炎设计

如果不诉诸不安全,您就无法避免循环:b := make([]uint64, len(a))for i, v := range a {    b[i] = uint64(v)}有关更多信息/示例,请参阅此问题或此问题。如果您真的想使用unsafe,那么b := *(*[]uint64)(unsafe.Pointer(&a))它会起作用(但我不建议您使用它,除非您有令人信服的理由这样做)。

慕斯709654

正如 Birits 所回答的,只有一种方法可以将一个切片转换为另一个切片。除非您正在寻找强制转换方法:1) unsafe.Pointer cast*(*[]uint64)(unsafe.Pointer(&int64_slice))2) 使用链接名编译指示编辑过的签名重新导入://go:linkname convert convert.Slicefunc convert(userIDs []int64) []int64 {    return userIDs}//go:linkname ConvertSliceInt64ToUInt64 convert.Slicefunc ConvertSliceInt64ToUInt64(userIDs ...int64) []uint64https://play.golang.org/p/8b-yVL_Ps-c
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go