
Go From Zero to Hero #19: Panduan Lengkap Menggunakan Method di Go-lang untuk Pemrograman Berorientasi Objek
- Daffa Fadhil
- Golang, Code
- 13 Juli 2026
Table of Contents
Halo Go Developers! Selamat datang kembali di seri Go From Zero to Hero.
Di artikel sebelumnya, kita sudah berhasil mengawinkan Struct dan Map untuk membuat sistem pendataan digital yang rapi. Kita tahu kalau Struct itu keren banget buat mengelompokkan berbagai data (properti/atribut) menjadi satu kesatuan.
Tapi sadar gak, sih? Struct yang kita buat kemarin itu sebenarnya masih “benda mati”. Dia cuma bisa menyimpan data, tapi tidak bisa melakukan aksi apa-apa secara mandiri.
Nah, di artikel kali ini, kita akan belajar cara menghidupkan Struct tersebut menggunakan fitur Go-lang yang bernama Method. Yuk, kita bahas sampai tuntas!
Apa itu Method? (Analogi Dunia Nyata)
Bayangkan sebuah Struct bernama Robot. Struct ini punya atribut seperti Nama (string) dan Baterai (int). Kalau kita cuma pakai struct biasa, robot ini cuma jadi pajangan yang menyimpan data baterai saja.
Agar robot ini bisa melakukan aksi—seperti berjalan, berbicara, atau menembak—kita butuh fungsi khusus yang menempel pada robot tersebut. Di Go-lang, fungsi yang menempel dan menjadi milik suatu Struct itulah yang disebut dengan Method.
Bedanya Fungsi Biasa vs Method:
- Fungsi Biasa: Bisa dipanggil oleh siapa saja secara bebas secara mandiri.
- Method: Hanya bisa dipanggil oleh objek/variabel yang dibuat dari Struct pemilik method tersebut.
Sintaks Dasar Method
Cara menulis method mirip dengan fungsi biasa (func), bedanya kita harus menyisipkan sebuah parameter khusus di antara kata kunci func dan nama fungsi tersebut. Parameter ini disebut sebagai Receiver.
Mari kita lihat struktur rumusnya:
func (receiver NamaStruct) NamaMethod() {
// Kode program di sini
}
Supaya lebih kebayang, mari kita langsung terapkan ke kode program nyata.
package main
import "fmt"
// 1. Kita buat Struct-nya dulu
type Player struct {
Name string
Level int
}
// 2. Kita buat Method yang menempel pada Struct Player
// (p Player) di bawah ini adalah Receiver-nya
func (p Player) Introduce() {
fmt.Printf("Halo, nama saya %s dan saya level %d!\n", p.Name, p.Level)
}
func main() {
// 3. Membuat objek dari Struct
hero := Player{Name: "GopherGamer", Level: 50}
// 4. Memanggil method menggunakan tanda titik (.)
hero.Introduce()
}
Coba perhatikan di dalam func main(). Kita memanggil method-nya dengan cara hero.Introduce(). Keren, kan? Struct Player kita sekarang seolah-olah punya “perilaku” atau aksinya sendiri.
Dua Jenis Receiver: Value vs Pointer
Ini adalah bagian paling krusial yang sering bikin bingung pemula di Go-lang. Receiver pada method terbagi menjadi dua jenis:
Value Receiver (Tanpa Tanda Bintang *) Gaya ini adalah yang kita pakai pada contoh di atas (p Player). Sifat dari Value Receiver adalah Read-Only. Method hanya menduplikasi data dari struct asli. Jadi, kalau kamu mengubah isi data struct di dalam method ini, data struct yang asli di main() tidak akan berubah.
Pointer Receiver (Menggunakan Tanda Bintang *) Jika kamu ingin membuat method yang bertugas untuk mengubah atau memanipulasi data di dalam struct asli (misalnya menaikkan level player, mengurangi darah, dll), kamu wajib menggunakan Pointer Receiver (p *Player).
Mari kita lihat perbedaan efeknya lewat kode berikut:
package main
import "fmt"
type Player struct {
Name string
Level int
}
// Menggunakan VALUE RECEIVER (Gak merubah data asli)
func (p Player) NaikLevelSalah() {
p.Level += 1
}
// Menggunakan POINTER RECEIVER (Merubah data asli)
func (p *Player) NaikLevelBenar() {
p.Level += 1
}
func main() {
gamer := Player{Name: "Rookie", Level: 1}
// Coba pakai method Value Receiver
gamer.NaikLevelSalah()
fmt.Println("Setelah LevelSalah:", gamer.Level) // Output tetap 1
// Coba pakai method Pointer Receiver
gamer.NaikLevelBenar()
fmt.Println("Setelah LevelBenar:", gamer.Level) // Output berubah jadi 2
}
Tips 💡
Kapan harus pakai Pointer Receiver (*)?
Jika method bertugas untuk mengubah/meng-update nilai data di dalam struct.
Jika ukuran data struct sangat besar, agar Go tidak membuang memori untuk menduplikasi/mengopi data tersebut saat method dipanggil.
Kesimpulan & Penutup
Selamat, Karakter Objek Pertama Pemrogramanmu Sudah Lahir! 🧠
Sekarang kamu sudah paham bahwa Method bukanlah hal yang asing atau rumit. Method hanyalah sebuah fungsi biasa yang diberikan “pemilik” (receiver) agar bisa menempel pada Struct tertentu. Dengan menguasai Value Receiver (hanya baca data) dan Pointer Receiver (bisa ubah data asli), kamu sudah memegang kendali penuh dalam membangun objek-objek yang interaktif di Go-lang!
Yuk, Nyicip Eksperimen Kecil! 🛠️
Coba buat sebuah Struct Kucing dengan field Nama (string) dan Energi (int). Buatlah dua buah method:
Makan()yang menggunakan Pointer Receiver untuk menambah nilaiEnergisebanyak +10.Lari()yang menggunakan Value Receiver untuk mencetak kalimat “Kucing sedang lari!”.
Coba panggil method Makan(), lalu cetak nilai Energi kucingmu di terminal. Apakah energinya bertambah?
🎯 Tantangan Untukmu (Challenge!)
Buatlah sebuah program Go dengan Struct RekeningBank yang memiliki field Pemilik (string) dan Saldo (int).
Kemudian buat 2 method:
Setor(jumlah int)$\rightarrow$ Menambah nilai saldo sesuai jumlah yang disetor.Tarik(jumlah int)$\rightarrow$ Mengurangi nilai saldo jika saldo mencukupi. Jika saldo tidak cukup, cetak pesan: “Peringatan: Saldo tidak cukup!”.
Contoh Alur:
dompet := RekeningBank{Pemilik: "Budi", Saldo: 100000}
dompet.Setor(50000) // Saldo jadi 150000
dompet.Tarik(200000) // Cetak pesan peringatan!
Tulis solusi kodenya di kolom komentar di bawah ya! Kalau masih bingung atau kena error, tanyakan saja, kita bedah bareng-bareng.
Bocoran Artikel Selanjutnya 🚀
Setelah kamu mahir mengawinkan data dan aksi menggunakan Struct & Method, kini saatnya kita melangkah ke konsep pemungkas Object-Oriented Programming (OOP) di Go!
Di artikel Go From Zero to Hero #20 selanjutnya, kita akan membedah Interface di Go — Cara Membuat Kode Fleksibel dan Modular. Siapkan diri kamu untuk naik level lagi!
Sampai jumpa di artikel berikutnya, tetap semangat, dan happy coding! 🚀