使用巢狀複合文字來初始化組合結構
在 Go 中,在嵌入其他結構時初始化組合結構可能會很棘手。 child := Child{ ID: id, a: a, b: b } 的原始語法可能會因無法直接初始化嵌入字段 ID 而導致錯誤。
克服此問題並維護封裝,使用嵌套複合文字:
child := Child{ Base: Base{ID: id}, // Initialize the embedded struct a: a, b: b, }
這種方法允許在單一表達式中初始化組合結構,同時透過巢狀嵌入結構來保留封裝初始化。
另一個解決方案,如問題中所暗示的,是使用像 NewFoo() 這樣的工廠方法。然而,嵌套複合文字提供了更簡潔和安全的替代方案。
複合文字的建議更改
Go 問題 9859 建議更改複合文字的語法以支援直接初始化嵌入欄位。此變更將啟用 child := Child{ ID: id, a: a, b: b } 的原始語法。
封裝注意事項
嵌入結構不是Go 中嚴格的封裝特性。雖然它允許間接存取嵌入字段,但它並沒有強制這樣做。程式碼除了使用child.ID之外,仍然可以直接存取child.Base.ID。因此,封裝的責任最終取決於應用程式的設計和使用。
以上是如何使用複合文字有效地初始化 Go 中的嵌入式結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!