11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Golang ポインタを用いることのメリット

Last updated at Posted at 2020-06-07

そもそも

Goなどのような値渡し言語では呼び出された関数はもとの引数への参照ではなく、引数のコピーだけを受け取るので、関数が引数を変更する必要がある場合、ポインタを渡すことは必須である。

ポインタを用いることのメリット

  • 上記の通り、ポインタを引数に渡すことで複数の関数間で同じオブジェクトを扱うことができ、そのオブジェクトに対して操作を行うことができる(というより、オブジェクトに変更を加える際は、ポインタ渡しが必須である)。
  • ポインタは比較的に軽く(8byte=64bit)ただのメモリアドレスのため、ポインタを使って大きな構造体を引数に渡すことも可能になる。もし値渡しを行っていると、相対的にさらに大きなシステムリソース(メモリや時間)を毎回のコピーで消費することになる。そのためGolangでは構造体を渡す際はポインタを使うことが推奨されている。

channel, slice, map について

Go言語のchannel、slice、mapの3つの型はメカニズムを実現するポインタのようなものであるため、直接渡すことができ、アドレスを取得してポインタを渡す必要はない。しかし、もし関数がsliceの長さを変更する場合はアドレスを取得し、ポインタを渡す必要がある。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?