Goポインタについて説明します。
変数のアドレス
変数はメモリ内に格納され、メモリ内のどこに存在するかはアドレスによって管理されています。
変数の前に &(アンバサンド) をつけると変数のアドレスを表すことになります。
以下は変数がメモリのどこに格納されているかアドレスを表示しています。
package main
import (
"fmt"
)
func main() {
var nameOne string
nameOne = "name_01"
fmt.Println(nameOne) // name_01 が表示される
// 変数 nameOne のアドレスが表示される
fmt.Println(&nameOne) // 0xc000096220 が表示されるが、各々の端末や環境により異なる。
}
ポインタ型変数
アドレスを扱う変数をポインタ型変数と呼びます。変数を宣言する際に *(アスタリスク) をつけます。
ポインタ型変数には変数のアドレスを代入する事ができます。
package main
import (
"fmt"
)
func main() {
var nameOne string
nameOne = "name_01"
fmt.Println(nameOne) // name_01 が表示される
// 変数 nameOne のアドレスが表示される
fmt.Println(&nameOne) // 0xc000096220 が表示されるが、各々の端末や環境により異なる。
// ポインタ型変数。ポインタ型変数にはアドレスを代入する事が出来る
var ad *string
ad = &nameOne
// 変数 nameOne と同じアドレスが表示される
fmt.Println(ad)
}
アドレスの中身の参照
ポインタ型変数のアドレスの中身を参照したい場合、変数の前に *(アスタリスク) をつけます。
package main
import (
"fmt"
)
func main() {
var nameOne string
nameOne = "name_01"
fmt.Println(nameOne) // name_01 が表示される
// 変数 nameOne のアドレスが表示される
fmt.Println(&nameOne) // 0xc000096220 が表示されるが、各々の端末や環境により異なる。
// ポインタ型変数。ポインタ型変数にはアドレスを代入する事が出来る
var ad *string
ad = &nameOne
// 変数 nameOne と同じアドレスが表示される
fmt.Println(ad)
fmt.Println(*ad) // name_01 が表示される
}
まとめ
- 変数の前に &(アンバサンド) をつけると変数のアドレスが表示される。
- 変数宣言の際に *(アスタリスク) をつけるとポインタ型変数として使える。
- ポインタ型変数には変数のアドレスを代入する事が出来る。
- ポインタ型変数の前に*(アスタリスク) をつけるとアドレスの中身を参照する事が出来る。