Dan*_*ill 14 arrays function go
我想构建一个返回任意大小的切片的函数.我知道我能做到
func BuildSlice() [100]int { return [100]int{} }
Run Code Online (Sandbox Code Playgroud)
但我希望能够从同一个函数返回不同大小的切片.就像是:
func BuildSlice(int size) [...]int { return [size]int{} }
Run Code Online (Sandbox Code Playgroud)
我已经尝试过上述以及
func BuildSlice(size int) []int { return [size]int{} }
Run Code Online (Sandbox Code Playgroud)
请指出我正确的方向.
谢谢.
Jam*_*dge 26
首先,切片已经是"可变大小":[100]int
并且[...]int
是数组类型定义.
[]int
是切片的正确语法,您可以将函数实现为:
func BuildSlice(size int) []int {
return make([]int, size)
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个具有所需大小的零值,类似于您的阵列版本.
内置函数 make 采用类型 T,该类型必须是切片、映射或通道类型,可以选择后跟特定于类型的表达式列表。它返回 T 类型的值(不是 *T)。存储器按照初始值部分中的描述进行初始化。
Call Type T Result
Run Code Online (Sandbox Code Playgroud)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,则会发生运行时恐慌。
Run Code Online (Sandbox Code Playgroud)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))
}
Run Code Online (Sandbox Code Playgroud)
输出:
7 42
100 100
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31029 次 |
最近记录: |