在Go 中派生用於JSON 解組的自訂類型
在Go 中使用自訂類型時,通常需要實作UnmarshalJSON函數來啟用自動從JSON 轉換為所需類型。然而,當類型源自於標量值時,就會出現挑戰。本文探討了解決此問題的解決方案。
考慮 PersonID 類型的範例,該類型表示用於識別個人的子類型整數常數。我們希望擴展此類型的功能以支援 JSON 字串的自動轉換。要為這種類型實作 UnmarshalJSON 變得很困難,因為它旨在直接傳回或修改標量值,而 UnmarshalJSON 需要一個結構體來進行修改。
為了解決這個問題,我們採用了指標接收器方法。透過使用指標接收器,UnmarshalJSON 方法中所做的變更將反映在原始值上。以下是修改後的UnmarshalJSON 實現的範例:
func (intValue *PersonID) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } *intValue = Lookup(s) return nil }
在此實作中,JSON 文字在傳遞到Lookup 函數之前先被解組為字串變量,該函數將字串轉換為所需的PersonID 值。然後將該值指派給指標 intValue。
此外,為了避免 JSON 標籤和 JSON 資料之間的衝突,請確保 MyType 結構中的標籤與 JSON 中的欄位名稱相符。透過執行以下步驟,您可以成功為派生標量類型實作 UnmarshalJSON。
以上是如何在 Go 中為派生標量類型實作自訂 JSON 解組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!