首頁  >  文章  >  後端開發  >  Go 中的嵌入:何時使用指標與值?

Go 中的嵌入:何時使用指標與值?

Susan Sarandon
Susan Sarandon原創
2024-11-02 08:21:29124瀏覽

Embedding in Go: When to Use a Pointer vs. a Value?

Go 中的嵌入:何時使用指針

將一個結構體嵌入另一個結構體時,使用指針還是值取決於關於所需的功能和記憶體管理注意事項。

使用值

按值嵌入結構意味著嵌入結構的副本儲存在包含結構中。這適用於以下情況:

  • 嵌入結構體較小且訪問頻繁。
  • 無需在運行時動態變更嵌入結構體。
<code class="go">type Job struct {
    Command string
    log.Logger
}</code>

使用指標

透過指標嵌入結構允許在包含結構的多個實例之間共享記憶體。這對於:

  • 嵌入大型或複雜的結構以避免不必要的重複。
  • 在運行時啟用對嵌入結構的動態變更。
<code class="go">type Job struct {
    Command string
    *log.Logger
}</code>

指針嵌入的優勢

Eric Urban(「Hydrogen18」)創造了術語「指針嵌入」。它有以下優點:

  • 使用透過引用初始化結構的函數,利用 NewX 慣用法。
  • 嵌入類型的功能而無需知道其實例化時間。

透過指針嵌入的享元模式

透過嵌入指向Bitmap 結構的指針,多個Renderer 結構可以共享相同的底層位圖數據,從而減少記憶體消耗並啟用運行時靈活性。

<code class="go">type Bitmap struct{
    data [4][5]bool
}

type Renderer struct{
    *Bitmap //Embed by pointer
    on uint8
    off uint8
}</code>

指針嵌入的限制

匿名欄位不能有指向指標或介面類型的指針,因為這些類型沒有方法。此限制旨在防止錯誤使用介面指標並保持語言的一致性。

以上是Go 中的嵌入:何時使用指標與值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn