亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

聲明切片還是制作切片?

聲明切片還是制作切片?

Go
繁花不似錦 2021-08-10 21:10:50
在 Go 中,var s []int和之間有什么區別s := make([]int, 0)?我發現兩者都有效,但哪個更好?
查看完整描述

4 回答

?
HUX布斯

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


查看完整回答
反對 回復 2021-08-10
?
ibeautiful

TA貢獻1993條經驗 獲得超6個贊

簡單的聲明

var s []int

不分配內存并s指向nil,而

s := make([]int, 0)

分配內存并將s內存指向具有 0 個元素的切片。

通常,如果您不知道用例的確切大小,則第一個更慣用。


查看完整回答
反對 回復 2021-08-10
?
呼喚遠方

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>]


查看完整回答
反對 回復 2021-08-10
  • 4 回答
  • 0 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號