はじめに
Go言語でつまずきやすいポイントのひとつが「ポインタ」です。
「難しそう…」と思われがちですが、
👉 仕組みを理解すればとてもシンプルです。
この記事では、Goのポインタの仕組みを初心者向けにわかりやすく解説します。
ポインタとは?(超重要)
ポインタとは「変数のメモリアドレスを扱う仕組み」です。
イメージ👇
- 変数 → データの箱
- ポインタ → 箱の場所(住所)
👉 データそのものではなく「場所」を扱う
ポインタの基本
① アドレス取得(&)
x := 10
p := &x
👉 &でアドレスを取得
② 値の取得(*)
fmt.Println(*p)
👉 *で中身を見る
図でイメージ
x = 10
p = &x
p → x → 10
👉 pはxの場所を指している
ポインタを使う理由
✔ 値を直接変更できる
x := 10
p := &x
*p = 20
fmt.Println(x) // 20
👉 元の値が変わる
関数とポインタ(超重要)
値渡し(変更されない)
func update(x int) {
x = 100
}
👉 呼び出しても変わらない
ポインタ渡し(変更される)
func update(x *int) {
*x = 100
}
a := 10
update(&a)
👉 aが100になる
structとポインタ
type User struct {
Age int
}
func update(u *User) {
u.Age = 50
}
👉 実務でよく使う
Goの特徴(重要)
👉 ポインタでも「.」でアクセスできる
user := &User{Age: 20}
user.Age = 30
👉 他言語より簡単
newとmakeの違い
new
p := new(int)
👉 ポインタを作る
make
m := make(map[string]int)
👉 map・slice用
初心者がつまずくポイント
❌ *と&の混乱
👉 &=住所取得
👉 *=中身取得
❌ nilポインタ
var p *int
👉 何も指していない
❌ 値渡しとポインタ渡しの違い
👉 ここが一番重要
実践サンプル
package main
import "fmt"
func update(x *int) {
*x = 100
}
func main() {
a := 10
update(&a)
fmt.Println(a)
}
👉 100になる
学習のコツ
- 図で理解する
- 値渡しと比較する
- structで使う
👉 ポインタは「慣れ」が全て
まとめ|ポインタは理解すれば簡単
Goのポインタは👇
✔ アドレスを扱う
✔ 値を直接変更できる
✔ 関数・structで重要
👉 実務で必須スキル


コメント