簡體   English   中英

go - 修改指向切片的指針不會修改原始

[英]go - Modifying pointer to slice doesn't modify the original

我嘗試創建一個結構,其中一個字段是指向現有空切片的指針。 然后我修改 struct 的字段,稍后我嘗試從原始切片中獲取新內容 - 但它仍然是空的!

這是演示代碼:

package main

import (
    "fmt"
)

type A struct {
    B []int
}

func main() {
    c := []int{}

    a := &A{
        B: c,
    }

    a.B = append(a.B, 5)

    fmt.Println(c)
    fmt.Println(a)
}

這里的結果是:

[]
&{[5]}

問題是 - 如何從原始切片和結構字段中獲取實際切片內容? 我沒有將切片作為參數傳遞給函數。

您可以使用如下示例中的指針切片:

package main

import (
    "fmt"
)

type A struct {
    B *[]int
}

func main() {
    c := []int{}

    a := &A{
        B: &c,
    }

    *a.B = append(*a.B, 4)
    *a.B = append(*a.B, 5)

    fmt.Println(c)

    fmt.Println(a.B)
}

結果結果是

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM