在Go 中,通常需要將結構體作為指針引用,特別是在使用物件導向時模式。但是,當將一個結構嵌入到另一個用作指標的結構中時,需要做出選擇:嵌入結構本身或指向它的指標。此決定具有微妙的含義,可能會影響程式碼行為。
考慮以下程式碼:
<code class="go">type B struct { X int } type A struct { B }</code>
這裡,B 結構體直接嵌入到一個結構體中。 A 的零值包括 B 類型的嵌入對象,該對像也有其零值。因此,我們可以安全地呼叫嵌入B 物件的Print 方法:
<code class="go">var a A a.Print() // prints 0</code>
相反,請考慮以下程式碼:
<code class="go">type B struct { X int } type A struct { *B }</code>
這裡,B 結構體作為指標嵌入A 結構體中。 A 的零值對於嵌入的 *B 有一個 nil 指標值。嘗試對嵌入的*B 物件呼叫Print 方法將導致恐慌:
<code class="go">var a A a.Print() // panics</code>
建立這些類型的新物件時,行為有所不同:
選擇直接嵌入結構或使用指標取決於預期的用例。嵌入結構提供了直接存取嵌入欄位的便利,而嵌入指標允許對嵌入結構進行修改以影響多個副本。了解這些含義可確保正確使用並避免程式碼中潛在的陷阱。
以上是在 Go 中嵌入結構體或指向結構體的指標:何時應該選擇什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!