Go勉強中です。PHPしかやったことのない私がポインタについて勉強しました。
実験的なことをしながらポインタを体感していきたいと思います。
ポインタを説明する前に
ポインタを説明する前に、まず「変数」についてお話しします。
変数
変数は、よくモノを入れておく箱
と例えられています。
そのモノを入れておく箱
を今回は番号付きロッカー
だと考えてください。
- どうしてそう考える必要があるか?
変数は、本来PCのメモリ上に保管されて処理されています。PC上の保管されるときは16進数のアドレス
が割り振られて保管され、必要な時に呼び出されます。
変数とはつまり、**16進数のアドレス
を、人間が判断しやすいように命名が可能な箱のようなモノ
です。**変数の概念を、少しだけPC寄って理解するため番号付きロッカー
とお考えください。
変数の宣言
ロッカー01番に数字を入れてみましょう。他の言語と同様、上書きすることも可能です。
var Locker01 int // 変数 Locker01 をint型として宣言
Locker01 = 5
fmt.Println(Locker01) // 5
Locker01 = 6
fmt.Println(Locker01) // 6
前置きが長くなりました。
ポインタ
ざっくり言うと転送装置です。
- 特殊な型
*
と&
で定義した場合
var money Money
money = Money{
amount: 120,
currency: "yen",
}
fmt.Printf("money :%+v\n", money)
fmt.Printf("変数に格納されているアドレス :%p", money)
格納されている16進数のアドレスが確認できる
出力
money :&{amount:120 currency:yen}
変数に格納されているアドレス :0xc00000a060
*
と&
を使わずにMoneyを定義した場合
var money Money
money = Money{
amount: 120,
currency: "yen",
}
fmt.Printf("money :%+v\n", money)
fmt.Printf("変数に格納されているアドレス :%p", money)
変数に格納されているアドレスが表示されず、何故かプロパティが出力される
出力
money :{amount:120 currency:yen}
変数に格納されているアドレス :%!p(main.Money={120 yen})