首頁 > 後端開發 > Golang > 嵌入式結構與結構指標:零值和複製有什麼關係?

嵌入式結構與結構指標:零值和複製有什麼關係?

DDD
發布: 2024-10-30 09:12:03
原創
354 人瀏覽過

Embedded Struct vs Pointer to Struct: What's the Deal with Zero Values and Copying?

嵌入式結構與指向結構的指標:對零值和複製的影響

當使用結構類型作為指針時(即,使用指針接收器,構造函數傳回A 等),嵌入結構體(如B)或其指標(如B)之間的選擇具有微妙但重要的後果。

零值

兩個選項的零值差異很大。嵌入B 直接創建一個具有零值的嵌入對象,這允許對其進行立即操作:

<code class="go">type AObj struct { B }
var aObj AObj
aObj.Print() // Prints 0 (B's zero value)</code>
登入後複製

相反,嵌入*B 會產生帶有nil 指針的零值,從而阻止直接使用:

<code class="go">type APtr struct { *B }
var aPtr APtr
aPtr.Print() // Panics (nil pointer dereference)</code>
登入後複製

複製

物件複製行為取決於嵌入類型。當B 作為物件嵌入時,複製時會建立一個新物件:

<code class="go">type AObj struct { B }
aObj2 := aObj
aObj.X = 1
aObj2.Print() // Prints 0 (copy of B's zero value)</code>
登入後複製

相反,使用指標嵌入(*B),原始物件和複製物件共享相同的基礎B 對象,從而允許同步更改:

<code class="go">type APtr struct { *B }
aPtr.B = &B{}
aPtr2 := aPtr
aPtr.X = 1
aPtr2.Print() // Prints 1 (shared underlying B)</code>
登入後複製

這些差異對於程式碼可讀性、可維護性和效能最佳化具有實際影響。透過了解結構嵌入與指標嵌入的細微差別,開發人員可以主動避免潛在的陷阱,並針對其特定用例利用最合適的方法。

以上是嵌入式結構與結構指標:零值和複製有什麼關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板