BAB 16: Mengenal Pointer di Golang – Cara Kerja 'Alamat Memori' yang Bikin Coding Lebih Fleksibel - Abd. Asis

BAB 16: Mengenal Pointer di Golang – Cara Kerja 'Alamat Memori' yang Bikin Coding Lebih Fleksibel

Setelah kamu paham tentang variable dan function, sekarang waktunya belajar konsep yang sering bikin programmer pemula penasaran: pointer. Pointer itu seperti alamat rumah untuk data di memori komputer. Dengan pointer, kamu bisa mengakses, mengubah, bahkan berbagi data antar function dengan cara yang lebih efisien.

Apa Itu Pointer?

Bayangkan kamu punya kotak berisi angka 4. Biasanya, kalau mau kasih kotak itu ke teman, kamu serahkan isinya. Tapi dengan pointer, kamu kasih alamat rumah kotak itu, jadi temanmu bisa langsung ke sana dan lihat (atau ubah) isinya. Pointer adalah “alamat” di mana data disimpan, bukan datanya langsung.

Di Golang, pointer ditandai dengan tanda asterisk (*) sebelum tipe data. Contoh:

var numberA int = 4
var numberB *int = &numberA

Di sini, numberB adalah pointer ke numberA. Tanda & dipakai untuk mengambil alamat memori dari variable.

Referencing dan Dereferencing

  • Referencing: Mengambil alamat memori variable dengan &.
  • Dereferencing: Mengambil nilai asli dari pointer dengan *.

Contoh:

var numberA int = 4
var numberB *int = &numberA

fmt.Println("numberA (value)   :", numberA)  // 4
fmt.Println("numberA (address) :", &numberA) // misal: 0xc20800a220

fmt.Println("numberB (value)   :", *numberB) // 4
fmt.Println("numberB (address) :", numberB)  // misal: 0xc20800a220

Output:

numberA (value)   : 4
numberA (address) : 0xc20800a220
numberB (value)   : 4
numberB (address) : 0xc20800a220

Efek Perubahan Nilai Pointer

Kalau kamu ubah nilai di alamat memori yang sama, semua variable yang mengarah ke alamat itu juga ikut berubah. Ini mirip seperti kamu ganti isi kotak di rumah, semua yang punya alamat rumah itu akan lihat isi yang baru.

var numberA int = 4
var numberB *int = &numberA

numberA = 5

fmt.Println("numberA (value)   :", numberA)
fmt.Println("numberB (value)   :", *numberB)

Output:

numberA (value)   : 5
numberB (value)   : 5

Pointer Sebagai Parameter Function

Pointer juga bisa dipakai sebagai parameter function. Ini berguna kalau kamu mau function mengubah nilai variable di luar function.

package main

import "fmt"

func main() {
    var number = 4
    fmt.Println("before :", number) // 4

    change(&number, 10)
    fmt.Println("after  :", number) // 10
}

func change(original *int, value int) {
    *original = value
}

Output:

before : 4
after  : 10

Di sini, function change menerima pointer ke variable number, lalu mengubah nilainya jadi 10. Karena yang diubah adalah alamat memori, nilai asli variable di luar function juga ikut berubah.

Kenapa Pointer Penting?

Pointer bikin program kamu lebih efisien, terutama saat mengolah data besar atau ingin function bisa mengubah data di luar scope-nya. Tapi, hati-hati: salah pakai pointer bisa bikin bug yang susah dicari. Selalu cek referensi dan pastikan kamu paham alur data.

Kesimpulan

Pointer adalah alat penting di Golang untuk mengakses dan mengubah data lewat alamat memori. Dengan memahami cara kerja pointer, kamu bisa bikin program yang lebih fleksibel dan efisien. Jangan ragu untuk eksperimen dan coba-coba, error itu bagian dari proses belajar!


Jika kamu ingin contoh penggunaan pointer di project nyata, misal untuk mengubah data dalam array atau struct, kita bisa lanjut di bab berikutnya. Selamat mencoba dan jangan takut error—semua programmer pernah salah, yang penting terus belajar!