Goにおけるポインタがよくわからなかったので、とりあえず使い方がわかったので、疑問点と一緒にアウトプットしようと思う。何か間違っている点がありましたら、恐れ多いのですがご指摘宜しくお願い致します。
記事の目標
この記事を読むことでGoにおけるポインタの概念を理解できる。
疑問点
- 使い所はどこか?
- なぜアドレスみたりできるのか、変数など直接取得すればいいのではないか?
(上記二つは調査中。。。)
前提知識
ポインタを理解するにはどうやら前提知識が必要そうだ。以下はこちらの記事から引用させていただきました。以下は変数とメモリとアドレスの説明です。
- メモリは、1バイト毎に番号がつけられ、区別されています。
- 変数は実行ファイルになると、番号が割り当てられます。
- 変数は、メモリ上の該当の番号の区分に格納され、記憶されます。
- この変数に付与されるメモリの区分番号がアドレス(16進数)です。
func main() {
test := "test"
fmt.Println(about)
}
上記の関数内に定義されている変数testもアドレス情報を持っている。
ポインタはアドレス情報のことを示している。上記を実行すると変数testに格納されているtestが出力される。変数testのアドレス情報を出力するには下記のように記述する。
package main
import (
"fmt"
)
func main() {
test := "test"
var pointer *string = &test
fmt.Println(test)
fmt.Println(pointer)
}
↓出力結果
//go run main.go
test
0x1400008e020
のようにアドレス情報が得られる。アドレス情報から変数の値にアクセスすることもできます。青の場合は以下のように*pointerと記述するだけで取得することができます。
package main
import (
"fmt"
)
func main() {
test := "test"
var pointer *string = &test
fmt.Println(test)
fmt.Println(*pointer)
}
上記の使い方となんとなくの概念を理解できたため、次はこちらを用いてどのような場面で用いるのかなどキャッチアップしていきたいと思います。
参考記事