ホームページ  >  記事  >  バックエンド開発  >  特定の条件が満たされた場合にのみ GO 構造を作成する

特定の条件が満たされた場合にのみ GO 構造を作成する

WBOY
WBOY転載
2024-02-08 21:05:49992ブラウズ

仅当满足特定条件时才创建 GO 结构

php エディタ Zimo では、特定の条件下で GO 構造を作成するという重要な機能を紹介します。この機能により、必要に応じて GO 構造を作成するかどうかを決定できるため、プログラムの効率とパフォーマンスが向上します。この機能を合理的に使用することで、GO 構造の不必要な作成を回避し、メモリ使用量とガベージ コレクションの負荷を軽減し、プログラムの実行効率を向上させることができます。この記事では、この機能の使用方法を詳しく説明し、実際のアプリケーションの例をいくつか示します。

質問の内容

私の go コードスニペットは次のとおりです:

リーリー

私には c のバックグラウンドがあります。これはcでは簡単になります。 Goには動的メモリ割り当てはありますか? Go でこれを実現するにはどうすればよいですか?

else で 2 を再度宣言するのは有効な go コードですか?

リーリー

それとも、ここで何らかのランタイムポリモーフィズムが必要なのでしょうか。

更新:

これを実行してみましたが、期待どおりにコンパイルすらできませんでした。

https://go.dev/play/p/ioq81aexgjn

再度更新

これを試してみましたが、うまくいくようです。これで大丈夫でしょうか?

https://go.dev/play/p/r_ywzmkgrps


正解


コードには 2 つの問題があります:

  1. 変数は囲むスコープ内で宣言されているため、そのスコープの外からはアクセスできません (if/else 句)
  2. 変数は値として宣言されています

最初の問題を解決するには、変数宣言を if 句のスコープ外に移動して、if ステートメントに続くコードからアクセスできるようにします。

リーリー

これで、両方の変数が宣言され、if ステートメントのどの句に到達したかに関係なく、両方の変数が新しく割り当てられた mystruct で初期化されます。

この問題を解決するには、変数をポインターに変更し、if ステートメントの対応するブランチに目的の値を代入します。 リーリー

ボーナスヒント: 将来のあなたに感謝します これを 1 組のステートメントにリファクタリングし、a または b またはその両方が必要かどうかを判断します次に、複合 if ステートメントを 2 つの 別々の ステートメントとして単純化し、それぞれ a または b を初期化します。 リーリー 目的は、論理的な重複を回避し(無味乾燥な原則:

同じことを繰り返さない

)、懸念事項を分離することです。つまり、a および b が必要かどうかという問題と、a および b の初期化がいつ必要になるかという問題を分離します。 em> 必須。 注: 投稿したコードからは条件が何であるかが明らかではないため、

条件 2

をどのように表現するかについてより具体的にすることはできません。

以上が特定の条件が満たされた場合にのみ GO 構造を作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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