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