LoginSignup
0
0

More than 3 years have passed since last update.

【Golang】ポインタについて

Posted at

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})
0
0
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
0
0