为了账号安全,请及时绑定邮箱和手机立即绑定

在golang中定义一个返回可变大小切片的函数

在golang中定义一个返回可变大小切片的函数

Go
慕斯709654 2021-07-27 10:07:00
我想构建一个返回任意大小切片的函数。我知道我能做到func BuildSlice() [100]int { return [100]int{} }但我希望能够从同一个函数返回不同大小的切片。就像是:func BuildSlice(int size) [...]int { return [size]int{} }我已经尝试了上述以及func BuildSlice(size int) []int { return [size]int{} }请指出我正确的方向。
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

首先,切片已经是“可变大小”:[100]int并且[...]int是数组类型定义。


[]int 是切片的正确语法,您可以将函数实现为:


func BuildSlice(size int) []int {

    return make([]int, size)

}

这将返回具有所需大小的零值切片,类似于您的数组版本所做的。


查看完整回答
反对 回复 2021-08-02
?
呼啦一阵风

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


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 359 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信