4 回答
TA贡献1876条经验 获得超6个赞
除了fabriziom的回答之外,您还可以在“ Go Slices: usage and internals ”中看到更多示例,其中[]int提到了用于:
由于 slice ( nil)的零值就像一个零长度 slice,您可以声明一个 slice 变量,然后在循环中附加到它:
// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
var p []int // == nil
for _, v := range s {
if fn(v) {
p = append(p, v)
}
}
return p
}
这意味着,要附加到切片,您不必先分配内存:nil切片p int[]足以作为要添加的切片。
TA贡献1993条经验 获得超5个赞
简单的声明
var s []int
不分配内存并s
指向nil
,而
s := make([]int, 0)
分配内存并将s
内存指向具有 0 个元素的切片。
通常,如果您不知道用例的确切大小,则第一个更惯用。
TA贡献1856条经验 获得超11个赞
更完整一点(在 中还有一个论点make)示例:
slice := make([]int, 2, 5)
fmt.Printf("length: %d - capacity %d - content: %d", len(slice), cap(slice), slice)
出去:
length: 2 - capacity 5 - content: [0 0]
或者使用动态类型slice:
slice := make([]interface{}, 2, 5)
fmt.Printf("length: %d - capacity %d - content: %d", len(slice), cap(slice), slice)
出去:
length: 2 - capacity 5 - content: [<nil> <nil>]
- 4 回答
- 0 关注
- 185 浏览
添加回答
举报