【初心者向け】Go言語のポインタの仕組みを解説|基礎から完全理解

プログラム

はじめに

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で重要

👉 実務で必須スキル

コメント

タイトルとURLをコピーしました