Golangのポインタ概要

概要

Golangのポインタの基本では参照渡しと値渡しの違いの観点からポインタについて書いたが、それ以前にポインタを扱っているうちに混乱してきたため、ポインタの概要をまとめる。

ポインタ型とは

  • メモリー上のアドレスを記憶する変数の型のこと

ポインタ型の定義

  • *を使って定義する

アドレス演算子と間接参照演算子

アドレス演算子 &

  • 任意の値からポインタ型を生成し、アドレスを得る

間接参照演算子 *

  • ポインタ型変数から値を参照する(デリファレンス)

ポインタ型変数

構造体とポインタ

構造体について復習

構造体とポインタ

compositeリテラルによる構造体の初期化

newで構造体を初期化

レシーバとポインタ

値レシーバ

ポインタレシーバ

値レシーバとポインタレシーバの違い

関数内で構造体のフィールドの値を変更したいときはポインターレシーバを使う。 mapやchanのような参照型をレシーバーに扱う場合は値レシーバでも良い。 ただし、厳密にパフォーマンスを考慮したりする場合には使い分けはこの限りではない。

ポインタで混乱したら

前半に記述したポインタ型の定義、演算子の役割について思い出す。

参考