保留嵌入式結構的自訂編組
在Go 中,將一個結構嵌入到另一個結構中是繼承功能的常見方法。但是,當嵌入結構具有自訂 MarshalJSON() 方法時,可能會出現問題。本文探討了這項挑戰的解決方案,確保外部結構可以正常編組其字段,同時仍利用嵌入結構的自訂編組。
考慮以下結構:
通常,將Employee 編組為JSON 會產生預期的輸出:
但是,為嵌入的Person 結構引入自🎜>
但是,為嵌入的Person 結構引入自🎜>但是,為嵌入的Person 結構引入自🎜>但是,為嵌入的Person 結構引入自🎜>
但是,為嵌入的Person 結構引入自🎜>
但是,為嵌入的Person 結構引入自🎜>但是,將定義MarshalJSON()方法會更改此行為:現在,編組Employee 只會產生大寫的名稱:要解決此問題,需要一個可能會嘗試將MarshalJSON() 方法新增到外部Employee 結構。但是,這種方法需要了解嵌入類型的自訂編組,這可能並不總是實用。
更通用的解決方案涉及直接在外部類型上實現MarshalJSON():此方法調用嵌入結構的MarshalJSON() 方法,將結果轉換為映射,並添加外部結構的欄位以產生所需的JSON 輸出。請注意,它不會操作嵌入結構的自訂編組。 或者,可以使用基於反射的方法:此方法使用反射來存取嵌入結構的值和字段,無需依賴結構知識即可實現自訂編組。 透過在外部類型上實作 MarshalJSON(),這種方法確保嵌入結構和外部結構的欄位都正確編組,保留所需的輸出。以上是如何在 Go 嵌入式結構中保留自訂編組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!