Go はどのような場合に値を返すのか、参照を返すのか、あるいは何も返さないのか?

王林
リリース: 2024-02-05 23:24:03
転載
1025 人が閲覧しました

Go はどのような場合に値を返すのか、参照を返すのか、あるいは何も返さないのか?

質問の内容

## の行に沿って、多くの関数が「参照によって渡される」項目を更新するコードを書いています。 ## 行の下の #DoSomethingB#。初心者の私にとって、これはかなり直感的ではありません。私はむしろ、関数がその結果を返すようにしたいと思っています(それがメソッドであり、レシーバーを更新する場合を除く)。 ###質問:###

DoSomethingB

のようなパターンを使用するための適切な議論はありますか?
    DoSomethingA
  1. によって? DoSomethingB (構造メソッドではありません) これは Go では良いスタイル、または許容できるスタイルと考えられますか?
  2. リーリー プレイグラウンドのリンクに移動します: https://play.golang.com/p/ELwljCaWDLg
正解


もちろん、質問を詳しく見てみましょう。 :


DoSomethingB と DoSomethingA
    : コピーを作成せずに元の変数を変更したい場合は、
  1. DoSomethingB

    のようなパターンを使用すると、不必要な割り当てを避けることができます。 。ただし、コードが理解しにくくなる可能性があります。 DoSomethingA (結果を返す) を使用することは、一般的に Go ではより慣用的であり、読みやすさの理由から好まれることがよくあります。

    DoSomethingB は Go において良いスタイルと考えられていますか?
  2. : Go で
  3. DoSomethingB

    のようなコードを目にするのは珍しいことではありませんが、特に大規模なデータ構造を扱う場合、Go の慣用的なアプローチにより、戻り値によるポインターの変更が推奨されます。ポインターを使用して値を直接変更すると (特に整数などの組み込み型の場合)、コードが理解しにくくなる可能性があります。

    DoSomethingC
  4. は、ローカル変数へのポインターを返すため、文法的ではないと考えられます。関数が戻った後、メモリ位置が他の目的に再利用される可能性があるため、これにより未定義の動作が発生する可能性があります。このパターンは避けた方が良いでしょう。

要約すると、慣用的な Go に従いたい場合は、DoSomethingA のようなパターンを推奨します。元のデータを変更する正当な理由があり、パフォーマンスが心配な場合 (大規模なデータ構造など)、

DoSomethingB

を使用できます。

以上がGo はどのような場合に値を返すのか、参照を返すのか、あるいは何も返さないのか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!