嵌入結構:何時首選指針
將一個結構嵌入另一個結構時,有兩種選擇:使用指針或嵌入值。為了指導這個決定,了解規範並考慮每種方法的優點非常重要。
指標與嵌入值
根據 Go 規範,匿名欄位(也稱為嵌入欄位)可以宣告為型別名稱或指向非介面類型名稱的指標。這表示您可以選擇在以下範例中為Logger 欄位使用類型log.Logger 或指標*log.Logger:
<code class="go">type Job struct { Command string *log.Logger }</code>
指標的好處
Eric Urban 的文章「Embedding in Go」強調了嵌入指標的優點,即「按指標嵌入」。其中包括:
指標嵌入範例
<code class="go">type Bitmap struct{ data [4][5]bool } type Renderer struct{ *Bitmap //Embed by pointer on uint8 off uint8 }</code>
在此範例中,渲染器類型透過以下方式嵌入點陣圖指標。這意味著 Renderer 的多個實例可以共用單一 Bitmap 實例並獨立自訂其行為。
技術限制
需要注意的是,您不能使用指向指標的指標或作為匿名欄位指向介面的指標。這種限制源於這些類型沒有方法,這是嵌入的關鍵方面。方法從嵌入類型提升為嵌入類型,允許您直接存取它們。
以上是在 Go 中嵌入結構時:指標還是嵌入值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!