ホームページ >バックエンド開発 >Golang >Go で派生スカラー型のカスタム JSON アンマーシャリングを実装するにはどうすればよいですか?

Go で派生スカラー型のカスタム JSON アンマーシャリングを実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 05:46:18364ブラウズ

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

Go での JSON アンマーシャリング用のカスタム タイプの導出

Go でカスタム タイプを使用する場合、多くの場合、有効にするために UnmarshalJSON 関数を実装する必要があります。 JSON から目的の型への自動変換。ただし、型がスカラー値から派生する場合には問題が発生します。この記事では、この問題を解決する解決策を検討します。

個人を識別するためのサブタイプ化された整数定数を表す PersonID タイプの例を考えてみましょう。この型の機能を拡張して、JSON 文字列からの自動変換をサポートしたいと考えています。 UnmarshalJSON はスカラー値を直接返すか変更することを目的としているのに対し、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。