技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

golang の値渡しと参照渡し

golang で関数を作成する際、引数を値渡しにするか、参照渡しにするのか、迷うことがあった。いろいろな記事を読んで、今のところの結論は以下。

  • 関数内で、引数で渡ってきたものに対する編集が必要な場合、つまり、関数の外側の世界に副作用を起こしたい場合、参照渡しにする。(まあ、これは値渡しではできないので、当たり前のことではあるが・・)
  • 例えば、大きな構造体を関数に渡す場合など、関数の引数のサイズが大きい場合、参照渡しにする。これは、値渡しにすると、関数呼び出しの際に引数の値のコピーが走るので、パフォーマンス的に宜しくないため。
  • map や slice はそもそも参照渡しとなるので迷うところはない。つまり、map や slice の変数のまま渡せば良い。