嵌入:何時使用指標與值引用
在Golang 中將一個結構合併到另一個結構時,需要選擇使用指標或值引用。考慮以下程式碼片段:
<code class="go">type Job struct { Command string *log.Logger }</code>
在此範例中,我們在 Job 結構中嵌入了 *log.Logger 類型(由指標表示)。或者,我們可以使用以下的值引用:
<code class="go">type Job struct { Command string log.Logger }</code>
雖然兩種方法都實現了嵌入,但它們的含義不同。根據 Go 規範,嵌入欄位支援類型本身或指向非介面類型的指標。至關重要的是,嵌入類型不能是指標類型。
嵌入指標(稱為「按指標嵌入」)具有特定的優勢。首先,它允許利用遵循 NewX 模式的函數,其中結構透過引用初始化和返回。其次,它支援在運行時將不同實例動態分配給嵌入類型。
例如,考慮以下程式碼:
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
在此範例中,Renderer 類型透過以下方式嵌入 Bitmap:參考。這允許 Bitmap 的單一實例充當多個 Renderer 實例的嵌入實例,每個實例都有其唯一的字元集。此程式碼的輸出演示了多個渲染器如何在同一底層資料結構上進行操作。
OXXO OXOO OXOO OXOO .@@. .@.. .@.. .@..
相較之下,嵌入值引用並不能提供這些優點。但是,它不需要實例化嵌入類型來存取其方法。最終,使用指標還是值引用的決定取決於應用程式的特定要求以及嵌入欄位所需的行為。
以上是Go 中的嵌入式欄位何時使用指標與值參考?的詳細內容。更多資訊請關注PHP中文網其他相關文章!