2015-12-24 4 views
16

私はGo言語を使い慣れていないし、C/C++ではバックグラウンドがほとんどないので、ポインタを使用するときとポインタを使用しないときのアイデアは自然に苦労している。この質問はオープンエンドと見なされるかもしれませんが、構造体を返すときとポインタを返すときのガイドライン(構造体/ポインタを引数として受け入れるのと同じことになります)が何であるか疑問に思っています。私が推測することができるものから、Golang:ポインタを使用するとき

は、次の文は成り立た:

  1. 構造体は値によって関数に渡されます。つまり、関数に渡すときに構造体のコピーが作成されます。
  2. 参照で構造体を渡したい場合は、代わりに関数定義でポインタ引数を使用し、その関数を呼び出すときにはaddressof演算子を使用します。
  3. 構造体を参照渡ししたいのは、渡す構造体が大きいため、値渡しする可能性が低い(またはそう思わない)場合や、作成したい場合私が渡しているコピーへの変更(可能性が高い)。
  4. 3.)に当てはまるように、上記の理由のいずれかが参考になっていない限り、私は価値あるものを渡すべきです。

私の前提は正しいですか?または私はポインタ上のマークを逃していますか?

+1

これは基本的なことです。あなたがイエスかノー質問より多くを求めているのかどうかはわかりません。 Re:#2、Goのすべての*が値渡しされていることを覚えておきましょう。この場合、値渡しのポインタを渡します。 – JimB

+0

それは本質的にはい/いいえの質問ですが、それが否定的だった場合、私は何が間違っていたか知りたかったでしょう。あなたのご意見ありがとうございます。 2の場合、ポインタが値渡しされていると言うのは正しいですが、そのポインタを使用してポインタが指すオブジェクトを変更しますが、その構造体へのポインタではなくstructを渡すとコピーを変更することはできますか? –

+1

はい、あなたは正しいです –

答えて

11

あなたの前提は正しいです。 #3については、Goは並行言語であり、ゴルーチンの参照渡しはすべて安全な同じ構造を読み込ませますが、同じ構造を変更することも危険です。

関連する問題