slice 指標地址相同,但是資料不同

William發表於2018-09-15

測試程式碼如下

type data struct {
    Ids []int
}

func Test_SS(t *testing.T) {
    d := data{}
    ids := make([]int, 0, 10)
    // ids:=[]int{}
    fmt.Printf("%p\r\n", ids)
    d.Ids = ids
    fmt.Printf("befer   %p\r\n", d.Ids)
    for i := 0; i < 10; i++ {
        ids = append(ids, i)
        fmt.Printf("%p\r\n", ids)
    }
    fmt.Printf("%p\r\n", ids)
    fmt.Printf("after %p\r\n", d.Ids)
    fmt.Println(d, len(d.Ids), cap(d.Ids), ids)
}

輸出結果為:

0xc4200b8050

befer 0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

0xc4200b8050

after 0xc4200b8050

{[]} 0 10 [0 1 2 3 4 5 6 7 8 9]

很好奇地址是相同的,為什麼值是不同的,望大神解惑

更多原創文章乾貨分享,請關注公眾號
  • slice 指標地址相同,但是資料不同
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章