首頁 > 後端開發 > Golang > 如何在 Go 中為派生標量類型實作自訂 JSON 解組?

如何在 Go 中為派生標量類型實作自訂 JSON 解組?

Patricia Arquette
發布: 2024-11-25 05:46:18
原創
408 人瀏覽過

How Can I Implement Custom JSON Unmarshaling for Derived Scalar Types in Go?

在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中文網其他相關文章!

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