Go(Golang)における**ポインタ(pointer)**は、値のメモリアドレスを指し示す変数のことです。CやC++に似た概念ですが、Goではより安全で簡潔に使えるように設計されています。
1. ポインタの基本概念
Goでは、変数のアドレスを取得するには&演算子を使い、ポインタが指す値を参照するには*演算子を使います。
例
2. ポインタの型
ポインタ型は、*Tの形式で表されます。これは「T型の値を指すポインタ」を意味します。
例:
-
*intはint型の値を指すポインタ -
*stringはstring型の値を指すポインタ
3. ポインタと関数
Goでは関数にポインタを渡すことで、引数の元の値を変更することができます(Call by Reference)。
例
4. new関数によるポインタの生成
new関数によるポインタの生成Goには組み込みのnew関数があり、指定した型のゼロ値を持つ変数をポインタとして生成します。
5. ポインタと構造体(struct)
ポインタは構造体と組み合わせて使われることが多く、メソッドのレシーバとしても頻繁に登場します。
6. Goにおけるポインタの制限
Goのポインタには以下のような制限があります:
-
ポインタ演算(
p++など)は不可:C言語のようにポインタ同士の加減算はできません。 -
NULLの代わりに
nil:ポインタの初期値や無効な状態をnilで表現します。 -
ポインタを使わなくても効率的な設計:多くの場合、Goでは値渡しでも十分効率が良いため、過剰なポインタの使用は推奨されません。
まとめ
| 操作 | 意味 |
|---|---|
&x |
変数xのアドレスを取得 |
*p |
ポインタpが指す値を取得 |
*p = val |
ポインタpが指す値を更新 |
new(Type) |
ゼロ値を持つポインタを生成 |
Goのポインタは、値の共有、関数での副作用の実現、構造体のメソッドの最適化など、重要な場面で利用されます。
生成日:2025/05/03