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!