php エディター Baicao は本日、強力な Golang 機能、つまりさまざまな構造タグ セットを使用したアンマーシャルを紹介します。 Golang プログラミングでは、Unmarshal はデータを構造に変換するプロセスです。ただし、データ ソースに異なる構造タグのセットが含まれている場合、従来のアンマーシャル手法ではニーズを満たせない可能性があります。したがって、この機能を実現するには、別の構造タグのセットを持つ Golang Unmarshal を使用する必要があります。この記事では、この機能の使い方や注意点について詳しく紹介します。一緒に探検しましょう!
json にカスタム キー名が含まれるサードパーティ ツールの API を使用しています。また、2 つの異なる環境 (運用環境とステージング環境) で API を使用する必要があります。残念ながら、API のカスタム フィールドには、同じデータを表すために両方の環境で異なるキー名が付いています。以下の例では、実稼働環境の json キー custom-1
は、ステージング環境の json キー custom-7
とまったく同じです。それらのいずれかを同じデータ構造にアンマーシャリングしたいのですが、方法がわかりません。 prod では json
を使用するが、## のステージング時には jsonstaging# を使用するタグの
json.unmarshal() 関数を何らかの方法でオーバーライドする方法があることを期待していました。私にとって、これが最も理にかなっていて、最も簡単な解決策です。
jsonobj 型に対してカスタム
unmarshaljson(data []byte) error 関数を作成する必要があると思いますが、やはり、希望する結果を達成する方法がわかりません。カスタム関数内の動作。誰かが私に正しい方向、ドキュメント、または使用できる例を教えてくれませんか?
リーリー
が得られます リーリー
これは私の現在のコードが期待しているものですが、を取得したいのです リーリー
ステージング環境または運用環境の API を変更できません。さまざまな構造とインターフェイスを作成しようとしましたが、フィールド (およびカスタム JSON キー) の数が増加する (そして成長する) と、メンテナンスの悪夢のようです。これが唯一の方法である場合は助けてください。これが正しい道ではないかもしれないと判断する前に、私もそれを機能させることができませんでした。 回避策将来の参考のために、これを実行したい人がいる場合は、組み込みの
reflect パッケージを使用する方法を見つけたと思います。
map[string] インターフェース{} を設定します。
objmap[tag].( に設定します。すべてのフィールドにラベルを設定すると、新しいオブジェクトが返されます。
リーリー
以上が構造タグの異なるセットを使用した Golang Unmarshalの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。