メモリ
変数や関数をどんどん突っ込んでいくことができる大きな箱のようなものです。
func main() {
// 定義した変数はメモリに保管される
memo := "メモです"
date := 20190611
}
アドレス
メモリ空間の中にある一つ一つ番地ののことです。
それぞれの番地にある処理、データを読み込んで実行します。
その名のとおり、メモリ空間それぞれの住所のようなものです。
定義した変数のアドレスを見てみる
func main() {
// 定義した変数はメモリに保管される
memo := "メモです"
date := 20190611
// memoとdateが補完されているアドレスを表示する
fmt.Println(&memo)
fmt.Println(&date)
}
// memoのアドレス
0xc000092030
// dateのアドレス
0xc000094000
ポインタ
アドレスを変数として保管することができるメモリを作成するのに使用します。
func main(){
memo := "メモです"
date := 20190611
// ポインタを使用することでメモリにmemoとdateのアドレスを保管することができる。
var pointer *string = &memo
var pointer2 *int = &date
fmt.Println(pointer)
fmt.Println(pointer2)
// memoのアドレス
0xc000092030
// dateのアドレス
0xc000094000
// ポインタのアドレスも見てみる
fmt.Println(&pointer)
fmt.Println(&pointer2)
// pointerのアドレス
0xc00000e010
// pointer2のアドレス
0xc00000e018
}
pointer
とpoiner2
はアドレスを保管している変数なので、memo
date
のアドレスとは違っていますね。
アドレスからメモリを参照する
func main(){
memo := "メモです"
date := 20190611
var pointer *string = &memo
var pointer2 *int = &date
fmt.Println(*pointer)
fmt.Println(*pointer2)
}
// fmt.Println(*pointer)の結果
メモです
// fmt.Println(*pointer2)の結果
20190611
pointer
変数にはmemo
のアドレスが格納されています。
そのため、 *pointer
としてあげることでアドレスに関連するメモリの中身を参照することができます。