首頁 > 後端開發 > Golang > 如何有效率地初始化Go中的嵌入式結構體?

如何有效率地初始化Go中的嵌入式結構體?

Mary-Kate Olsen
發布: 2024-12-17 01:03:24
原創
701 人瀏覽過

How Can I Efficiently Initialize Embedded Structs in Go?

Go 中使用嵌入式結構體進行結構體初始化

組合結構體是Go 中用於程式碼組織和重用的常見做法。但是,當從嵌入結構繼承子欄位時,初始化組合結構可能會帶來挑戰。

考慮以下範例:

type Base struct {
    ID string
}

type Child struct {
    Base
    a int
    b int
}
登入後複製

要初始化Child,人們可能會期望使用以下內容語法:

child := Child{ ID: id, a: a, b: b }
登入後複製
登入後複製

但是,由於Child 結構體文字中的欄位ID 未知,這將導致編譯錯誤。要解決此問題,必須單獨初始化 ID 欄位:

child := Child{ a: 23, b: 42 }
child.ID = "foo"
登入後複製

這種方法暴露了 ID 是嵌入欄位的事實,從而違反了封裝原則。如果將公共欄位移至嵌入式結構中,它還會帶來破壞初始化的風險。

要解決此問題,有兩種建議的解決方案:

  1. 嵌套複合文字:

    嵌套複合文字可用來初始化嵌入字段單一表達式:

    child := Child{Base: Base{ID: id}, a: a, b: b}
    登入後複製
  2. Go 中的建議更改:

    Go 問題9859提出了一項更改,以使複合文字與欄位存取一致嵌入式類型。如果實現,此變更將允許使用以下語法:

    child := Child{ ID: id, a: a, b: b }
    登入後複製
    登入後複製

需要注意的是,嵌入類型並沒有提供真正意義上的封裝。儘管使用 child.ID 語法,應用程式仍然可以直接存取 child.Base.ID。

以上是如何有效率地初始化Go中的嵌入式結構體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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