ホームページ >バックエンド開発 >Golang >キーとして参照せずに別の構造体の構造体フィールドを使用する方法

キーとして参照せずに別の構造体の構造体フィールドを使用する方法

WBOY
WBOY転載
2024-02-10 12:42:17397ブラウズ

キーとして参照せずに別の構造体の構造体フィールドを使用する方法

PHP の開発では、ある構造体の中で別の構造体のフィールドを使用する状況によく遭遇します。ただし、キーとして直接参照すると、コードが乱雑で保守不能になる可能性があります。では、別の構造体で構造体フィールドを使用するにはどうすればよいでしょうか? PHP エディター Baicao は、コードをより明確で読みやすくするための簡潔で明確なソリューションを提供します。以下を見てみましょう!

質問内容

構造体名を使用せずに構造体フィールドを別の構造体に挿入したい。

私はこれができることを知っています:

リーリー

しかし、次の構造が生成されます:

リーリー

このようなことをするにはどうすればよいですか:

リーリー

次のように使用します

リーリー ######出来ますか?

解決策

簡単に言えば、現在の言語実装を使用してそれを行うことはできません。

リテラルを初期化するときは、明示的に行う必要があります (つまり、

literal

![原文ママ])。 user には person が含まれるため、次のように、リテラルの user にはリテラルの person が含まれている必要があります。 リーリー ただし、user

型の

変数を取得したら、匿名フィールドを活用して、user 経由で匿名の person# を設定 (または取得) できます。 ##name: リーリー なぜ go は私にこのような仕事をさせるのですか? 内部の

person

があなたが探している方法で初期化できると想像してみましょう:

リーリー

次に、後で user 構造を変更し、

独自の

name フィールドを 追加することをさらに想像してみましょう。 リーリー これで、新しい name フィールドを

明らかに初期化できます:

リーリー これは、以前に user.person.name を初期化したコードと同じですが、現在は user.name

を初期化していることに注意してください。良くない。

###さらに質問を### このようなコードにはさらに多くの罠が隠されています。 まず、user

name

フィールドを追加します。

すでにあります。

同様に、

name の user 変数を「破棄」します。への参照 ###: ### リーリー さらに、匿名の person フィールドのみを使用すると、user.person.name フィールドは、デフォルトで「name」フィールドとして json にマーシャリングされます。 リーリー name フィールドが追加された場合、

this

"name" および user.person.name としてマーシャリングされるフィールドです。フィールドがまったくグループ化されていません

>. json タグを user.person.name に追加できると思うかもしれません (例: ) リーリー しかし、now

person

は、name フィールドを持つ object にマーシャリングされます:

リーリー

これは、username## がない場合でも、匿名の person のマーシャリングされたフィールドの名前を変更しようとすると発生する可能性があります。 # 分野### 。 つまり、構造体内に「フィールドを追加する」方法として匿名構造体を使用することは問題が発生し、脆弱になる可能性があるため、避けるべきです。

以上がキーとして参照せずに別の構造体の構造体フィールドを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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