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條經驗 獲得超6個贊
簡單的聲明
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 關注
- 216 瀏覽
添加回答
舉報