Pointer di Golang

Halo, teman-teman!
Di tutorial kali ini, kita akan bahas salah satu konsep penting dalam pemrograman Go (Golang), yaitu pointer. Pointer ini sangat berguna, apalagi kalau kamu udah mulai masuk ke dunia backend dan main-main dengan data yang besar atau manipulasi memory.
Sebagai developer backend, kamu pasti akan sering nemuin pointer ini, jadi yuk kita pelajari bareng-bareng!
Apa itu Pointer?
Pointer adalah variabel yang menyimpan alamat memori dari variabel lain.
Daripada menyimpan nilai langsung, pointer menyimpan *lokasi* dari nilai tersebut di memori.
> Bayangin kamu punya alamat rumah. Daripada bawa rumahnya, kamu cukup bawa alamatnya aja kalau mau kasih tahu orang lain. Nah, pointer itu seperti alamat rumah tersebut.
Kenapa Pointer Penting?
Pointer digunakan karena:
* Efisiensi memory (gak perlu copy data besar-besaran)
* Modifikasi data secara langsung di fungsi lain
* Kerja bareng dengan data di heap (bukan stack)
Cara Kerja Pointer di Golang
1. Mengambil Alamat Variabel (&)
Kita bisa dapat alamat dari suatu variabel dengan menggunakan simbol &.
package main
import "fmt"
func main() {
x := 10
fmt.Println("Nilai x:", x)
fmt.Println("Alamat x:", &x)
}Output:
Nilai x: 10
Alamat x: 0xc000014088 // ini contoh alamat memory2. Menyimpan Alamat ke Pointer (*)
Kita bisa menyimpan alamat tersebut ke variabel pointer.
package main
import "fmt"
func main() {
x := 10
var ptr *int = &x
fmt.Println("Nilai pointer ptr:", ptr)
fmt.Println("Nilai yang ditunjuk ptr:", *ptr)
}Penjelasan:
* *int artinya ptr adalah pointer ke int
* *ptr digunakan untuk mengakses nilai yang ditunjuk pointer
🏠 Analogi Simpel
Bayangin:
* x = sebuah kotak berisi angka 10
* &x = alamat kotak (misalnya: "Jl. Memory No. 80")
* ptr = catatan alamat tersebut
* *ptr = buka kotaknya dan lihat isinya → hasilnya 10
3. Mengubah Nilai Lewat Pointer
Pointer bisa digunakan untuk mengubah nilai asli dari suatu variabel.
package main
import "fmt"
func ubahNilai(val *int) {
*val = 20
}
func main() {
x := 10
ubahNilai(&x)
fmt.Println("Setelah diubah:", x) // Output: 20
}Perhatikan:
* Kita kirim alamat x ke fungsi ubahNilai
* Fungsi mengubah nilai di alamat itu, sehingga x ikut berubah
Analoginya Simpel:
* x = 10 → kamu punya sebuah kotak berisi angka 10
* &x → kamu tahu alamat kotaknya
* *ptr → kamu buka kotak dari alamat itu dan ambil isinya
Kesalahan Umum Saat Pakai Pointer
- Dereferencing null pointer
Jangan pernah akses nilai dari pointer kosong (nil), nanti panik (panic!).
var ptr *int
fmt.Println(*ptr) // PANIC!- Lupa pakai
*saat ingin ubah nilai
Kalau kamu cuma pakai pointer tanpa *, kamu nggak ubah isinya, cuma alamatnya aja.
Kapan Harus Pakai Pointer?
* Saat mau modifikasi variabel dari fungsi
* Saat kerja dengan struct besar (biar hemat memori)
* Saat bikin linked list, tree, atau data structure lainnya
* Saat kamu pakai interface yang butuh pointer receiver
Contoh Kasus Real-Life di Backend
Misal kamu punya struct User dan kamu mau update nama user dari dalam fungsi:
type User struct {
Name string
}
func GantiNama(u *User) {
u.Name = "Fardan"
}
func main() {
user := User{Name: "Anonim"}
GantiNama(&user)
fmt.Println(user.Name) // Output: Fardan
}Kesimpulan
Pointer di Go itu:
* Menyimpan alamat variabel lain
* Berguna untuk efisiensi dan manipulasi langsung
* Sering dipakai di fungsi, struct, dan data besar
Kalau kamu paham pointer, kamu bisa bikin program Go yang lebih efisien dan powerful!
Kalau kamu masih bingung, gak apa-apa. Pointer itu memang butuh waktu untuk benar-benar nyantol di kepala. Latihan aja terus, dan jangan ragu nanya!
Article Series
Golang Basic
Lanjutkan membaca seri ini untuk melihat perjalanan lengkapnya.
- 1Panduan Instalasi Golang di WSL 2 Ubuntu21 Mar 20252 min read
- 2Menginisiasi Project Golang23 Mar 20252 min read
- 3Memulai Program dengan Hello World23 Mar 20252 min read
- 4Tipe Data String, Boolean, dan Number di Golang26 Mar 20253 min read
- 5Tipe Data Array, Slice, dan Map di Golang27 Mar 20252 min read
- 6Panduan Lengkap If-Else dan Switch dalam Golang27 Mar 20253 min read
- 7Function di Golang30 Mar 20253 min read
- 8Panic, defer dan recovery di Golang10 Apr 20253 min read
- 9Struct dan Struct Method di Golang10 Apr 20252 min read
- 10Interface dan Interface Kosong di Golang10 Apr 20253 min read
- 11Pointer di Golang14 Apr 20253 min readCurrent article
- 12🧠 Latihan Pointer di Golang14 Apr 20252 min read
- 13Package, Import, dan Access Modifier di Golang16 Apr 20253 min read