You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从已有切片创建不同类型的新切片?

Go语言不同类型切片的副本创建方法

Go标准库的copy函数要求源切片和目标切片的元素类型必须完全一致,所以你没法直接用copy(newSlice, s)完成[]int32到[]int64的类型转换。最直接且易读的方式是手动遍历切片,逐个转换元素类型:

func f(s []int32) int32 {
    newSlice := make([]int64, len(s))
    // 遍历原切片,逐个转换类型并赋值
    for idx, val := range s {
        newSlice[idx] = int64(val)
    }
    // 这里可以对newSlice进行后续操作
    
    return 0 // 根据实际需求修改返回值
}

如果你的项目使用Go 1.18及以上版本(支持泛型),还可以封装一个通用的切片转换函数,方便重复使用:

// ConvertSlice 通用切片类型转换函数,接收源切片和类型转换函数
func ConvertSlice[SrcType any, DstType any](src []SrcType, converter func(SrcType) DstType) []DstType {
    dst := make([]DstType, len(src))
    for i, v := range src {
        dst[i] = converter(v)
    }
    return dst
}

// 使用示例
func f(s []int32) int32 {
    newSlice := ConvertSlice(s, func(v int32) int64 {
        return int64(v)
    })
    // 对newSlice进行操作
    
    return 0
}

这种方式不仅适用于int32转int64,其他需要类型转换的切片场景也能复用这个函数,代码更简洁通用。

内容的提问来源于stack exchange,提问作者Alexander Fernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:05:08