ホームページ > バックエンド開発 > Golang > Go to 関数での参照および値による受け渡し

Go to 関数での参照および値による受け渡し

王林
リリース: 2024-02-12 23:21:10
転載
597 人が閲覧しました

在 Go to 函数中通过引用和值传递

PHP 開発では、Go to 関数はプログラムのフローを制御するために使用できる非常に一般的に使用される関数です。 Go to 関数を使用する場合、パラメーターを渡す方法は 2 つあります: 参照によるものと値によるものです。パラメーターが参照によって渡される場合、関数内のパラメーターを変更すると、関数の外部の変数値に影響します。パラメーターが値によって渡される場合、関数内のパラメーターを変更しても、関数の外部の変数値には影響しません。したがって、関数を作成するときは、期待されるプログラム ロジックを実現するために、実際のニーズに応じて適切なパラメーター転送方法を選択する必要があります。この記事では、読者がこの重要な PHP 関数をよりよく理解し、適用できるように、Go to 関数における参照および値による受け渡しの使用法と違いを詳しく紹介します。

質問内容

goでの参照渡しと値渡しについて少し混乱しています。

型の前にある * の説明を見てきました。

リーリー

これは私にとって意味がありません。

Java では、データベース インスタンスを関数に渡す場合、これを行います

リーリー

しかし、go の例では、次のように渡しています。

リーリー

なぜタイプの前にアスタリスクを追加する必要があるのですか?

このチートシートに基づいて、私は知りました。

リーリー

ポインタアドレスだけをパラメータとして送信したい理由がわかりません。

解決策

まず、技術的には値渡しのみを行います。オブジェクトへのポインタを渡すときは、オブジェクトを参照によって渡すのではなく、値によってポインタを渡します。違いは微妙ですが、場合によっては関連性があります。たとえば、呼び出し元に影響を与えないポインター値を逆参照して、その値が指すメモリーを上書きするのではなく、その値を上書きすることができます。

リーリー

「型の前にアスタリスクが必要なのはなぜですか?」という質問について: アスタリスクは、値が sql.db ではなく sql.db 型へのポインタであることを意味します。 値のタイプ。これらは交換できません。

なぜポインタアドレスを送信するのでしょうか?このようにして、関数の呼び出し元と関数本体の間で値を共有し、関数内で行われた変更を呼び出し元に反映させることができます (たとえば、ポインターは「セッター」メソッドがオブジェクトに対して動作できる唯一の方法です)。これは実際に Java コードでも行われていることです。Java では 常に 参照 (ポインタ) によってオブジェクトにアクセスするため、Java はこれを明示的に指示するのではなく自動的に実行します。ただし、go ではポインターを介してオブジェクトにアクセスすることもできるため、明示的にする必要があります。関数を呼び出してオブジェクトを直接渡す場合、関数はオブジェクトのコピーを取得します。関数がオブジェクトを変更しても、呼び出し元にはそれらの変更は表示されません。したがって、変更を関数の外に反映させたい場合は、ポインターを渡す必要があります。この方法では、ポインターはコピーされますが、ポインターが指すオブジェクトは共有されます。 関連項目:

ポインターに関するツアー セクション

, ポインターに関する仕様セクションに移動 , アドレス演算子の仕様セクションに移動

以上がGo to 関数での参照および値による受け渡しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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