ホームページ >バックエンド開発 >Golang >Go はどのような場合に値を返すのか、参照を返すのか、あるいは何も返さないのか?

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

王林
王林転載
2024-02-05 23:24:031256ブラウズ

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 までご連絡ください。