首頁 > 後端開發 > Golang > 如何在 Go 嵌入式結構中保留自訂編組?

如何在 Go 嵌入式結構中保留自訂編組?

DDD
發布: 2024-12-17 19:07:10
原創
854 人瀏覽過

How to Preserve Custom Marshalling in Go Embedded Structs?

保留嵌入式結構的自訂編組

在Go 中,將一個結構嵌入到另一個結構中是繼承功能的常見方法。但是,當嵌入結構具有自訂 MarshalJSON() 方法時,可能會出現問題。本文探討了這項挑戰的解決方案,確保外部結構可以正常編組其字段,同時仍利用嵌入結構的自訂編組。

考慮以下結構:

通常,將Employee 編組為JSON 會產生預期的輸出:

但是,為嵌入的Person 結構引入自🎜>

但是,為嵌入的Person 結構引入自🎜>

但是,為嵌入的Person 結構引入自🎜>

但是,為嵌入的Person 結構引入自🎜>

但是,為嵌入的Person 結構引入自🎜>

但是,為嵌入的Person 結構引入自🎜>

但是,將定義MarshalJSON()方法會更改此行為:

現在,編組Employee 只會產生大寫的名稱:

要解決此問題,需要一個可能會嘗試將MarshalJSON() 方法新增到外部Employee 結構。但是,這種方法需要了解嵌入類型的自訂編組,這可能並不總是實用。

更通用的解決方案涉及直接在外部類型上實現MarshalJSON():此方法調用嵌入結構的MarshalJSON() 方法,將結果轉換為映射,並添加外部結構的欄位以產生所需的JSON 輸出。請注意,它不會操作嵌入結構的自訂編組。 或者,可以使用基於反射的方法:此方法使用反射來存取嵌入結構的值和字段,無需依賴結構知識即可實現自訂編組。 透過在外部類型上實作 MarshalJSON(),這種方法確保嵌入結構和外部結構的欄位都正確編組,保留所需的輸出。

以上是如何在 Go 嵌入式結構中保留自訂編組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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