Pointer

Alamat memori, & dan *, serta kapan memakai pointer.

Part 15 dari 23 ± 35 menit Gratis

Setiap variable punya alamat

Variable disimpan di memori pada suatu alamat. Operator & mengambil alamat sebuah variable, dan * mengikuti alamat untuk membaca atau mengubah isinya.

x := 10
p := &x            // p bertipe *int, berisi alamat x
fmt.Println(*p)    // 10   (membaca lewat pointer)
*p = 20            // mengubah x lewat pointer
fmt.Println(x)     // 20
  • &x → "alamat x"
  • *p → "isi yang ditunjuk p" (dereference)
  • *int → tipe "pointer ke int"

Kenapa penting? Argumen disalin

Go selalu mengirim argumen sebagai salinan:

func tambah(n int) {
    n++              // hanya mengubah salinan
}

x := 10
tambah(x)
fmt.Println(x)       // tetap 10

Untuk mengubah variable asli, kirim pointer:

func tambahP(n *int) {
    *n++
}

tambahP(&x)
fmt.Println(x)       // 11

nil pointer

Pointer tanpa alamat bernilai nil. Membaca *p saat p == nil menyebabkan panic. Selalu periksa jika pointer bisa kosong.

new

new(int) membuat variable int baru dan mengembalikan pointernya (jarang dipakai; biasanya &x atau &Struct{}).

Pointer ke struct

Go memudahkan: p.Nama otomatis dipahami sebagai (*p).Nama.

Kapan memakai pointer?

  • Function perlu mengubah data pemanggilnya.
  • Data besar (struct besar) — menyalin mahal.
  • Menandai "nilai opsional" (nil berarti tidak ada).

Selain itu, nilai biasa lebih sederhana dan aman. Go tidak punya aritmatika pointer seperti C, sehingga jauh lebih aman.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X