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

如何同时为Go语言slice初始化初始值与指定容量?

在Go中同时为Slice初始化值并指定容量的方法

你可以不用手动循环的繁琐写法,有两种更简洁高效的方式实现需求:

方法一:使用内置copy函数

copy是Go专门用于切片间复制的内置函数,效率优于手动循环,代码也更简洁:

const ESTIMATEDSIZE = 10000
var init_arr = [...]int{1,1,2,3,5,8,13}
fibbo := make([]int, len(init_arr), ESTIMATEDSIZE)
copy(fibbo, init_arr[:])

这里先通过make创建一个长度等于初始数组长度、容量为ESTIMATEDSIZE的切片,再用copy把初始数组的内容复制进去,既保留了初始值,又预分配了足够容量。

方法二:先创建空容量切片,再用append填充初始值

先初始化一个长度为0、容量为ESTIMATEDSIZE的空切片,再通过append一次性添加初始数组的所有元素:

const ESTIMATEDSIZE = 10000
var init_arr = [...]int{1,1,2,3,5,8,13}
fibbo := make([]int, 0, ESTIMATEDSIZE)
fibbo = append(fibbo, init_arr[:]...)

这种写法最终得到的切片长度等于初始数组长度,容量保持为ESTIMATEDSIZE,同样满足需求。

补充说明你尝试的两种写法为何不合法

  • init_arr[::ESTIMATEDSIZE]:Go的切片表达式仅支持[start:end]或[start:end:cap]格式,你写的[::ESTIMATEDSIZE]语法错误,且切片的容量由底层数组决定,无法通过切片表达式直接修改为指定值。
  • make([]int{1,1,2,3,5,8,13}, len(init_arr), ESTIMATEDSIZE):make函数的第一个参数必须是切片类型(如[]int),不能是数组字面量,因此该写法不符合语法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:22:38