2 回答
TA贡献1805条经验 获得超10个赞
首先,切片已经是“可变大小”:[100]int并且[...]int是数组类型定义。
[]int 是切片的正确语法,您可以将函数实现为:
func BuildSlice(size int) []int {
return make([]int, size)
}
这将返回具有所需大小的零值切片,类似于您的数组版本所做的。
TA贡献1802条经验 获得超6个赞
Go 编程语言规范
制作切片、贴图和通道
内置函数 make 接受类型 T,它必须是切片、映射或通道类型,可选地后跟特定于类型的表达式列表。它返回一个类型为 T(不是 *T)的值。内存按照初始值部分中的描述进行初始化。
Call Type T Result
make(T, n) slice slice of type T with length n and capacity n
make(T, n, m) slice slice of type T with length n and capacity m
大小参数 n 和 m 必须是整数类型或无类型。常量大小参数必须是非负的并且可以由 int 类型的值表示。如果 n 和 m 都提供并且是常数,则 n 不得大于 m。如果在运行时 n 为负数或大于 m,则会发生运行时恐慌。
s := make([]int, 10, 100) // slice with len(s) == 10, cap(s) == 100
s := make([]int, 1e3) // slice with len(s) == cap(s) == 1000
s := make([]int, 1<<63) // illegal: len(s) is not representable by a value of type int
s := make([]int, 10, 0) // illegal: len(s) > cap(s)
例如,
package main
import "fmt"
func main() {
s := make([]int, 7, 42)
fmt.Println(len(s), cap(s))
t := make([]int, 100)
fmt.Println(len(t), cap(t))
}
输出:
7 42
100 100
- 2 回答
- 0 关注
- 359 浏览
添加回答
举报