在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。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3