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

问题描述 投票:0回答:2

我想将[] 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
}
go slice
2个回答
1
投票

[不求助于unsafe,您不能避开loop

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

有关更多信息/示例,请参见this questionthis one。如果您真的想使用unsafe,那么b := *(*[]uint64)(unsafe.Pointer(&a))可以使用(但是除非有充分的理由,否则我不建议您使用它)。


0
投票

只有一种方法可以将切片转换为另一切片,正如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

© www.soinside.com 2019 - 2024. All rights reserved.