如何同时为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
相关产品推荐
相关产品推荐

