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 サイトの他の関連記事を参照してください。