解引用結構體:了解值複製與引用賦值
在Go 中使用結構體時,可以使用星號運算子( *)取消引用結構體指針,引發關於它是否返回相同的結構體值或新副本的問題。讓我們透過一個例子來闡明這一點:
考慮以下程式碼:
在這種情況下,函數 Study() 傳回一個指向 me 結構體的指標。當我們在主函數中呼叫 Study() 並將其指派給 p 時,我們本質上是儲存對原始 me 結構的參考。然而,當我們使用 obj := *p 取消引用 p 時,我們正在複製 p 指向的結構體的值。這相當於:
因此,obj 成為 me 類型的新變量,使用與 p 指向的結構體相同的數據進行初始化。這意味著 obj 和 p 具有不同的記憶體位址,即使它們包含相同的資料。
需要注意的是,如果我們對 obj 結構體進行任何更改,它們不會影響 p 指向的數據,除非 me 結構包含引用類型(例如切片、映射或通道)。在這種情況下,對這些欄位的變更將反映在 obj 和 p 指向的結構中。
但是,如果我們想要將引用分配給與p 相同的結構,而不是複製其值,我們可以使用直接賦值:
在這種情況下,obj將保存與p 相同的結構的直接引用,並且對obj 所做的任何更改也將透過p.
以上是Go 結構:取消引用指標時的值複製或引用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!