ホームページ  >  記事  >  バックエンド開発  >  構造タグの異なるセットを使用した Golang Unmarshal

構造タグの異なるセットを使用した Golang Unmarshal

WBOY
WBOY転載
2024-02-09 23:10:09520ブラウズ

具有不同结构标签集的 Golang Unmarshal

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 関数を作成する必要があると思いますが、やはり、希望する結果を達成する方法がわかりません。カスタム関数内の動作。誰かが私に正しい方向、ドキュメント、または使用できる例を教えてくれませんか? リーリー

go run で実行すると

が得られます リーリー

これは私の現在のコードが期待しているものですが、

を取得したいのです リーリー

ステージング環境または運用環境の API を変更できません。

さまざまな構造とインターフェイスを作成しようとしましたが、フィールド (およびカスタム JSON キー) の数が増加する (そして成長する) と、メンテナンスの悪夢のようです。これが唯一の方法である場合は助けてください。これが正しい道ではないかもしれないと判断する前に、私もそれを機能させることができませんでした。

回避策

将来の参考のために、これを実行したい人がいる場合は、組み込みの

reflect パッケージを使用する方法を見つけたと思います。

最初に json.unmarshal() 関数を使用する必要がありますが、構築するオブジェクトの代わりに

map[string] インターフェース{} を設定します。

次に、環境とマップを取得する関数を書きました。実際のオブジェクト (マップではない) の新しいインスタンス内のすべてのフィールドをループし、使用している環境のラベルを取得します。次に、新しいオブジェクトのフィールドを

objmap[tag].() に設定します。すべてのフィールドにラベルを設定すると、新しいオブジェクトが返されます。

これは私の作業用コードです:

リーリー

以上が構造タグの異なるセットを使用した Golang Unmarshalの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。