猿问

声明切片还是制作切片?

在 Go 中,var s []int和之间有什么区别s := make([]int, 0)

我发现两者都有效,但哪个更好?


繁花不似锦
浏览 186回答 4
4回答

HUX布斯

除了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[]足以作为要添加的切片。

ibeautiful

简单的声明var s []int不分配内存并s指向nil,而s := make([]int, 0)分配内存并将s内存指向具有 0 个元素的切片。通常,如果您不知道用例的确切大小,则第一个更惯用。

呼唤远方

更完整一点(在 中还有一个论点make)示例:slice := make([]int, 2, 5)fmt.Printf("length:&nbsp; %d - capacity %d - content:&nbsp; %d", len(slice), cap(slice), slice)出去:length:&nbsp; 2 - capacity 5 - content:&nbsp; [0 0]或者使用动态类型slice:slice := make([]interface{}, 2, 5)fmt.Printf("length:&nbsp; %d - capacity %d - content:&nbsp; %d", len(slice), cap(slice), slice)出去:length:&nbsp; 2 - capacity 5 - content:&nbsp; [<nil> <nil>]
随时随地看视频慕课网APP

相关分类

Go
我要回答