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

如何合并两个返回数组为新数组,保留编译期信息且支持长度可变?

编译期合并固定长度数组的方案

针对你提出的合并固定长度数组且保留编译期信息的需求,在Go 1.18+中可以通过泛型+编译期常量推导实现完全适配长度变化的合并方法,具体如下:

核心实现:泛型合并函数

利用Go的泛型特性,编写一个支持任意长度固定数组的合并函数,编译期会自动推导合并后的数组长度:

func Merge[T any, Len1, Len2 int](arr1 [Len1]T, arr2 [Len2]T) [Len1 + Len2]T {
    var merged [Len1 + Len2]T
    copy(merged[:Len1], arr1[:])
    copy(merged[Len1:], arr2[:])
    return merged
}

使用方式

直接传入foo()和bar()的返回值即可,编译期会自动计算合并后的数组长度:

combined := Merge(foo(), bar())
// 当foo返回[2]func()、bar返回[3]func()时,combined类型为[5]func()
// 若后续foo返回长度改为4、bar改为5,combined会自动变为[9]func(),无需修改合并逻辑

特性说明

  • 编译期信息完全保留:Len1和Len2是编译期常量,因此Len1+Len2也会被编译器视为常量,合并后的数组长度在编译阶段就已确定,完全满足后续编译器展开数组的需求。
  • 自动适配长度变化:只要foo()和bar()返回的仍是固定长度数组,无论长度如何修改,合并函数都会自动推导新的合并后长度,无需手动调整代码。
  • 类型安全:泛型会确保传入的两个数组元素类型一致,编译阶段就能拦截类型不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:15:58